C++标准库 第七章 STL迭代器
生活随笔
收集整理的這篇文章主要介紹了
C++标准库 第七章 STL迭代器
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
迭代器
- 能力:行進(jìn)和存取的能力
Input迭代器
- 一次一個(gè)向前讀取元素,按此順序一個(gè)一個(gè)返回元素
- 例子:從標(biāo)準(zhǔn)輸入裝置(鍵盤(pán)) 讀取數(shù)據(jù),同一個(gè)數(shù)據(jù)不會(huì)被讀取兩次,流水一樣,指向的是邏輯位置
- 使用前置式遞增運(yùn)算符 ++x 替代后置式遞增運(yùn)算符x++,前者不需要返回舊的數(shù)值,不需要花費(fèi)一個(gè)對(duì)象來(lái)保存舊的數(shù)值
- Input無(wú)遞減運(yùn)算操作符號(hào)
?Output輸出迭代器
- 和input迭代器相反,作用是將元素?cái)?shù)值一個(gè)一個(gè)寫(xiě)入。不可以使用輸出迭代器對(duì)同一序列進(jìn)行兩次遍歷寫(xiě)入、
- operator* 只有在賦值語(yǔ)句的左手邊才會(huì)有效
- 輸出迭代器沒(méi)有比較操作,無(wú)法檢測(cè) 輸出迭代器是否有效,或者寫(xiě)入數(shù)據(jù)是否成功
- 例子:inserters用于將元素插入到容器內(nèi)的一種迭代器,對(duì)其賦予一個(gè)新的數(shù)值,就會(huì)將其安插在容器內(nèi)部,元素之前不會(huì)被覆蓋
?Forward (前向)迭代器?
- forward前向迭代器是 input(全部功能)和output(部分功能)迭代器的結(jié)合。
- 區(qū)別于輸出迭代器,前向迭代器可以多次指向同一群集中的同一個(gè)元素,并可以多次處理同一個(gè)元素
- forward迭代器提領(lǐng)數(shù)據(jù)之前需要確保數(shù)據(jù)有效,如果使用while(true),就會(huì)出現(xiàn)錯(cuò)誤,因?yàn)閒orward會(huì)訪問(wèn) end()對(duì)應(yīng)的元素,引發(fā)錯(cuò)誤
- 輸出迭代器不可以使用 這個(gè)循環(huán)?while(pos != coll.end())???,因?yàn)槠錄](méi)有定義operator!=
Bidirectional?
?Random Access (隨機(jī)存取)迭代器
- 需要提供迭代器的算數(shù)運(yùn)算,類似于指針的算數(shù)運(yùn)算,也就是加減某一個(gè)特定的偏移量,能處理距離問(wèn)題,使用諸如 < >等相互關(guān)系運(yùn)算符進(jìn)行比較
- 支持隨機(jī)存取迭代器的對(duì)象和型別:可隨機(jī)存取的容器(vector\deque)、strings(字符串、string、wstring)、一般的array(指針)
- 只有是隨機(jī)存取迭代器才可以使用operator < 作為循環(huán)的結(jié)束與否的判斷條件
- 代碼一定要嚴(yán)謹(jǐn):比如(coll.end()-1)如果群集為空,便會(huì)訪問(wèn)到begin()之前的數(shù)據(jù),出現(xiàn)錯(cuò)誤;
- 下面的代碼可能出現(xiàn)問(wèn)題,vector迭代器可能被實(shí)例化為一般的指針,考慮到C++不允許你修改任何基本型別的暫時(shí)值(包括指針),但是struct和class可以,因此使用輔助對(duì)象
?
- ?strings迭代器也常會(huì)被實(shí)例化為一般的字符指針
迭代器相關(guān)的輔助函數(shù)
- advance() 、distance() 適用于random access迭代器,前進(jìn)后退以及處理迭代器之間的距離
- iter_swap適用于迭代器的數(shù)值交換
?
?
?
迭代器配接器
- ?逆向模式、安插模式、流模式
逆向模式
- 重新定義遞增和遞減運(yùn)算,行為倒置
?
?
Insert迭代器
- ?將賦值新值轉(zhuǎn)化為安插新值
?
?
?
?
?
?
Input stream
?
?
?
?
?
?
?缺省調(diào)用,后面三個(gè)數(shù)值均使用默認(rèn)值
總結(jié)
以上是生活随笔為你收集整理的C++标准库 第七章 STL迭代器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 航天晨光是军工股吗
- 下一篇: C语言深度剖析书籍学习记录 第二章 符号