Iterator(迭代器)是一種 "可以迭代某序列內全部元素"的對象,可經過改編自尋常pointer的一致接口來完成工做。dom
Iterator奉行一個純抽象的概念: 任何東西,只要行爲相似iterator,就是一種Iterator。可是不一樣的迭代器擁有不一樣的能力。函數
廢話很少了說咱們來了解一下迭代器的分類.spa
Output-iterator:對象
Output-iterator容許一步一步前行並搭配write動做.所以你能夠經過Output-iterator對區間內的元素進行挨個賦值,可是不能使用Output-iterator對同一區間迭代2次.索引
其支持的操做:接口
*iter = val : 將val寫到迭代器所指位置.input
++iter : 向前步進,返回新位置(也可能只是個無用的操做,參考std::ostream_iterator).it
iter++ : 向前步進,一般狀況下返回舊位置(也可能只是個無用的操做,參考std::ostream_iterator).io
標準庫提供了std::ostream_iterator是典型的 Output-iterator!stream
咱們經常使用的全部迭代器都具備Input-iterator的能力,並且更強.
Input-iterator:
Input-iterator迭代器只能一次一個之前進方向讀取元素,按此順序一個個返回元素值。
其支持的操做:
*iter : 返回讀取到的值.
iter->member : 返回讀取的元素的成員.
++iter : 向前步進(返回新位置).
iter++ : 向前步進(發揮舊位置).
iter1 == iter2 : 判斷2個迭代器是否相等.
iter1 != iter2 : 判斷2個迭代器是否不相等.
TYPE(iter) : 拷貝構造函數.
其中標準庫對於Input-iterator的 ==和!= 沒有要求: 若是兩個input-iterator都不是尾後迭代器,且指向不一樣位置,他們的比較結果會不相等.
其中標準庫中的std::istream_iterator是典型的Input-iterator!
Forward-iterator:
Forward-iterator提供保證: 若是兩個Forward-iterator都不是尾後迭代器,且指向不一樣的位置,它們的比較結果必定不會相等!
其支持的操做:
*iter : 返回讀取到的值.
iter->member : 訪問讀取到的元素的成員(若是有的話).
++iter : 向前步進(返回新位置).
iter++ : 向前步進(返回舊位置).
iter1 == iter2 : 判斷2個迭代器是否相等.
iter1 != iter2 : 判斷2個迭代器時候不相等.
TYPE() : 經過默認構造函數建立一個迭代器.
TYPE(iter) : 迭代器的拷貝構造函數.
iter1 = iter2 : 迭代器的拷貝賦值運算符.
兩個Forward-iterator若是指向同一個元素,調用 == 會獲得true, 若是二者同時遞增會再次指向同一個元素.
其中標準庫中的std::forward_list是典型的提供了Forward-iterator的表明.
Bidirectional-iterator:
Bidirectional-iterator是在Forward_iterator的基礎上增長了回頭的能力.換句話來講,它支持遞減操做,能夠一步一步後退.
其支持的操做:
*iter : 返回讀取到的值.
iter->member : 訪問讀取到的元素的成員(若是有的話).
++iter : 向前步進(返回新位置).
iter++ : 向前步進(返回舊位置).
iter1 == iter2 : 判斷2個迭代器是否相等.
iter1 != iter2 : 判斷2個迭代器時候不相等.
TYPE() : 經過默認構造函數建立一個迭代器.
TYPE(iter) : 迭代器的拷貝構造函數.
iter1 = iter2 : 迭代器的拷貝賦值運算符.
--iter : 步退返回新位置.
iter-- : 步退返回舊位置.
Random-access-iterator:
Random-access-iterator迭代器在Bidirectional-iterator的基礎上增長了隨機訪問的能力。所以它必須提供iterator算術運算。
其支持的操做:
*iter : 返回讀取到的值.
iter->member : 訪問讀取到的元素的成員(若是有的話).
++iter : 向前步進(返回新位置).
iter++ : 向前步進(返回舊位置).
iter1 == iter2 : 判斷2個迭代器是否相等.
iter1 != iter2 : 判斷2個迭代器時候不相等.
TYPE() : 經過默認構造函數建立一個迭代器.
TYPE(iter) : 迭代器的拷貝構造函數.
iter1 = iter2 : 迭代器的拷貝賦值運算符.
--iter : 步退返回新位置.
iter-- : 步退返回舊位置.
iter[n] : 訪問索引位置爲n的元素(針對尋常的 C-Style array).
iter+n : 將迭代器向前前進n個位置.
n+iter : 將迭代器向前前進n個位置.
iter - n: 將迭代器後退n個位置.
iter1 - iter2 : 返回2個迭代器之間的位置.
iter1 < iter2 : 判斷iter1是否在iter2以前.
iter1 > iter2 :判斷iter1是否在iter2以後.
iter1 <= iter2 :判斷iter1是否不在iter2以後.
iter1 >= iter2 : 判斷iter1是否不在iter2以前.