C 的五類迭代器

2021-09-25 12:55:25 字數 1639 閱讀 3161

前言:根據演算法所要求迭代器的操作,可將迭代器分為5個迭代器類別

類似容器,

迭代器也定義了一組公共操作。一些操作所有迭代器都支援,另外一些只有特定類別的迭代器才支援。例如,ostream_iterator只支援遞增、解引用和賦值。vector、string和deque的迭代器除了這些操作外,還支援遞減、演算法運算和關係運算。

c++標準指明了泛型和數值演算法和每個迭代器引數的最小類別。對於向乙個演算法傳遞錯誤類別的迭代器的問題,很多編譯器不會給出任何警告或提示。

學習課本:cpp primer

乙個輸入迭代器必須支援的操作:

1)用於比較兩個迭代器的相等和不相等運算子(==、!=)

2)用於推進迭代器的前置和後置遞增運算子(++)

3)用於讀取元素的解引用運算子(*);解引用只會出現在賦值運算子的右側(即val= *iter;)

4)箭頭運算子(->),等價於(*it).member,即解引用迭代器,並提取物件的成員

輸入迭代器只用於順序訪問。對於乙個輸入迭代器,*it++保證是有效的,但遞增它可能導致所有其他指向流的迭代器失效。即,不能保證輸入迭代器的狀態可以儲存下來,也不能保證用這個輸入迭代器來訪問元素。因此,輸入迭代器只能用於單遍掃瞄演算法。

總結一句話:輸入迭代器主要用於讀取容器的值。

乙個輸出迭代器必須支援:

1)用於推進迭代器的前置和後置遞增運算子(++)

2)解引用運算子(*),只出現在賦值運算子的左側(向乙個已經解引用的輸出迭代器賦值,就是將值寫入它所指向的元素( *iter=val;))

我們只能向乙個輸出迭代器賦值一次。類似輸入迭代器,輸出迭代器只能用於單遍掃瞄演算法。用作目的位置的迭代器通常是輸出迭代器。ostream_iterator型別就是輸出迭代器。

總結一句話:輸出迭代器主要利用乙個容器的輸入迭代器,將值寫入到輸出迭代器所指向的另乙個容器中去。

前向迭代器只能在序列中沿乙個方向移動。前向迭代器支援所有輸入和輸出迭代器的操作,而且可以多次讀寫同乙個元素。因此,我們可以儲存前向迭代器的狀態,使用前向迭代器的演算法可以序列進行多遍掃瞄。演算法replace要求前向迭代器,forward_list上的迭代器也是前向迭代器。

除了支援前向迭代器的操作之外,雙向迭代器還支援前置和後置遞減運算子(–)。演算法reverse要求雙向迭代器,除了forword_list之外,其他標準庫都提供符合雙向迭代器要求的迭代器。

此類迭代器支援雙向迭代器的所有功能,還支援下表的所有操作。

1)用於比較兩個迭代器相對位置的關係運算子(和》=)

2)迭代器和乙個整數值的加減運算(+,+=,-和-=),計算結果是迭代器在序列中前進或後退給定的整數個元素後的位置

3)用於兩個迭代器上的減法運算子(-),得到兩個迭代器的距離

4)下標運算子(iter[n])與*( *iter[n])等價

C 的迭代器

迭代器是c 標準庫中的重要元件,特別是在容器內部,沒有迭代器,容器也就無所謂存在了。例如 vector容器簡而言之就是3個迭代器 start finish 以及end of storage vector的任何操作都離不開這3個迭代器。接下來,總結一下c 中的迭代器的操作。c 的迭代器分為5類,依次為...

c stl 五種迭代器

2010 12 31 14 22 25 分類 c c 舉報 字型大小訂閱 我的 書 迭代器的分類 iterator categories input iterator 唯讀向前遍歷的迭代器。例如 istream。output iterator 只寫向前遍歷的迭代器。例如 ostream,insert...

string類 迭代器 vector類

string類 可變長1 用多少不夠用現增加 malloc 2 先預留再釋放不需要的部分 reverse shrink to fit 操作字串 目標 實現mystring 任務 學會使用string類成員函式 初始化 插入 比較 查詢 刪除 遍歷 替換 標頭檔案 include string s h...