1、三種疊代器
1)插入疊代器(insert iterator):疊代器擴充卡,與容器綁定在一起,實作在容器中插入元素的功能。形參為一個疊代器和一個指向容器的引用。
• back_inserter,建立使用 push_back 實作插入的疊代器,形參為指向容器的引用的疊代器擴充卡。
• front_inserter,使用 push_front 實作插入。
• inserter,使用 insert 實作插入操作。除了所關聯的容器外,inserter還帶有第二實參:指向插入起始位置的疊代器。Inserter在它的疊代器實參所指的位置前面插入新元素。
replace_copy (ivec.begin(), ivec.end(), inserter (ilst, it), 100, 0);
2)iostream疊代器(iostream iterator):與輸入或輸出流綁定在一起,用于疊代周遊所關聯的 IO 流。
雖然 iostream 類型不是容器,但标準庫同樣提供了在 iostream 對象上使用的疊代器:istream_iterator 用于讀取輸入流,而 ostream_iterator 則用于寫輸出流。這些疊代器将它們所對應的流視為特定類型的元素序列。使用流疊代器時,可以用泛型算法從流對象中讀資料(或将資料寫到流對象中)。
iostream疊代器的構造函數
istream_iterator<T> in(strm);
建立從輸入流strm中讀取T類型對象的istream_iterator對象
istream_iterator<T> in;
istream_iterator 對象的超出末端疊代器
ostream_iterator<T> in(strm);
建立将T類型的對象寫到輸出流strm的ostream_iterator對象
ostream_iterator<T> in(strm, delim);
建立将 T 類型的對象寫到輸出流 strm 的ostream_iterator 對象,在寫入過程中使用 delim作為元素的分隔符。delim 是以空字元結束的字元數組(C風格字元串)。
istream_iterator 的操作
it1 == it2
it1 != it2
比較兩上 istream_iterator 對象是否相等(不等)。疊代器讀取的必須是相同的類型。如果兩個疊代器都是 end 值,則它們相等。對于兩個都不指向流結束位置的疊代器,如果它們使用同一個輸入流構造,則它們也相等
*it
傳回從流中讀取的值
it->mem
是 (*it).mem 的同義詞。傳回從流中讀取的對象的 mem 成員
++it
it++
通過使用元素類型提供的 >> 操作從輸入流中讀取下一個元素值,使疊代器向前移動。通常,字首版本使用疊代器在流中向前移動,并傳回對加 1 後的疊代器的引用。而字尾版本使疊代器在流中向前移動後,傳回原值
(1)流疊代器都是類模闆:任何已定義輸入操作符(>> 操作符)的類型都可以定義istream_iterator。任何已定義輸出操作符(<< 操作符)的類型可定義ostream_iterator。
(2)示例
示例1
其中end_of_stream定義為空的疊代器對象,用作結束疊代器。綁定流上的疊代器在遇到檔案結束或某個錯誤時,将等于結束疊代器的值。
示例2
先iter++,傳回iter,再*iter。
示例3
(3)流疊代器的限制
• 不可能從 ostream_iterator 對象讀入,也不可能寫到istream_iterator 對象中。
• 一旦給 ostream_iterator 對象賦了一個值,寫入就送出了。指派後,沒有辦法再改變這個值。此外,ostream_iterator 對象中每個不同的值都隻能正好輸出一次。
• ostream_iterator 沒有 -> 操作符。
3)反向疊代器(reverse iteraor):反向周遊。所有容器類型都定義了自己的reverse_iterator類型,由 rbegin 和 rend 成員函數傳回。
反向疊代器需要使用自減操作符。流疊代器不能建立反向疊代器(因為不能反向周遊流)。
示例

2、map、set和list類型提供雙向疊代器,而string、vector和deque容器上定義的疊代器都是随機通路疊代器都是随機通路疊代器,用作通路内置數組元素的指針也是随機通路疊代器。
3、疊代器
Input iterator(輸入疊代器)
讀,不能寫;隻支援自增運算
Output iterator(輸出疊代器)
寫,不能讀;隻支援自增運算
Forward iterator(前向疊代器)
讀和寫;隻支援自增運算
Bidirectional iterator(雙向疊代器)
讀和寫;支援自增和自減運算
Random access iterator(随機通路疊代器)
讀和寫;支援完整的疊代器算術運算
4、關聯容器的key是const對象,是以隻能使用與關聯容器綁在一起的疊代器來提供用于讀操作的實參。最好将關聯容器上的疊代器視為支援自減運算的輸入疊代器,而不是完整的雙向疊代器。
5、超出末端疊代器用作結束周遊的“哨兵”,指向範圍内最後一個元素的下一位置。超出末端疊代器可能指向不存在的元素,是以永遠不能做解引用運算。
6、随機疊代器,除了支援雙向疊代器相同的操作之外,還提供了使用關系運算比較疊代器值的能力,以及在疊代器上做算術運算的能力。是以,這類疊代器支援随機通路元素。
參考:
[3] 疊代器
<a href="http://blog.163.com/zhoumhan_0351/blog/static/39954227201022783524890/">http://blog.163.com/zhoumhan_0351/blog/static/39954227201022783524890/</a>