STL iterator 類型

     STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)構成的.  

     對應於它們所支持的操作,共有五種 iterators(迭代器)。

           input         output
              \            /
                 forward
                     |
                bidirectional
                     |
               random access

 

 

 

要注意,上面這圖表並不是表明它們之間的繼承關係:而只是描述了迭代器的種類和接口。處於圖表下層的迭代器都是相對於處於圖表上層迭代器的擴張集。例如:forward迭代器不但擁有input和output迭代器的所有功能,還擁有更多的功能。

     input iterators(輸入迭代器)只能向前移動,每次只能移動一步,只能讀它們指向的東西,而且只能讀一次。它們以一個輸入文件中的 read pointer(讀指針)爲原型;C++ 庫中的 istream_iterators 就是這一種類的典型代表。output iterators(輸出迭代器)與此類似,只不過用於輸出:它們只能向前移動,每次只能移動一步,只能寫它們指向的東西,而且只能寫一次。它們以一個輸出文件中的 write pointer(寫指針)爲原型;ostream_iterators 是這一種類的典型代表。這是兩個最不強力的 iterator categories(迭代器種類)。因爲 input(輸入)和 output iterators(輸出迭代器)只能向前移動而且只能讀或者寫它們指向的地方最多一次,它們只適合 one-pass 運算。

  一個更強力一些的 iterator category(迭代器種類)是 forward iterators(前向迭代器)。這種 iterators(迭代器)能做 input(輸入)和 output iterators(輸出迭代器)可以做到的每一件事情,再加上它們可以讀或者寫它們指向的東西一次以上。這就使得它們可用於 multi-pass 運算。STL 沒有提供 singly linked list(單向鏈表),但某些庫提供了(通常被稱爲 slist),而這種 containers(容器)的 iterators(迭代器)就是 forward iterators(前向迭代器)。TR1 的 hashed containers(哈希容器)的 iterators(迭代器)也可以屬於 forward category(前向迭代器)。

  bidirectional iterators(雙向迭代器)爲 forward iterators(前向迭代器)加上了和向前一樣的向後移動的能力。STL 的 list 的 iterators(迭代器)屬於這一種類,set,multiset,map 和 multimap 的 iterators(迭代器)也一樣。

  最強力的 iterator category(迭代器種類)是 random access iterators(隨機訪問迭代器)。這種 iterators(迭代器)爲 bidirectional iterators(雙向迭代器)加上了 "iterator arithmetic"(“迭代器運算”)的能力,也就是說,在常量時間裏向前或者向後跳轉一個任意的距離。這樣的運算類似於指針運算,這並不會讓人感到驚訝,因爲 random access iterators(隨機訪問迭代器)就是以 built-in pointers(內建指針)爲原型的,而 built-in pointers(內建指針)可以和 random access iterators(隨機訪問迭代器)有同樣的行爲。vector,deque 和 string 的 iterators(迭代器)是 random access iterators(隨機訪問迭代器)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章