標準模板庫(The Standard Template Library, STL)定義了五種迭代器。下面的圖表畫出了這幾種:
???????????
input???????? output
??????????????\????????????/
???????????????? forward
?????????????????????|
??????????????? bidirectional
?????????????????????|
????????????? ?random access
要注意,上面這圖表并不是表明它們之間的繼承關系:而只是描述了迭代器的種類和接口。處于圖表下層的迭代器都是相對于處于圖表上層迭代器的擴張集。例如:forward迭代器不但擁有input和output迭代器的所有功能,還擁有更多的功能。
各個迭代器的功能如下:
迭代器類別 |
說明 |
輸入 |
從容器中讀取元素。輸入迭代器只能一次讀入一個元素向前移動,輸入迭代器只支持一遍算法,同一個輸入迭代器不能兩遍遍歷一個序列 |
輸出 |
向容器中寫入元素。輸出迭代器只能一次一個元素向前移動。輸出迭代器只支持一遍算法,統一輸出迭代器不能兩次遍歷一個序列 |
正向 |
組合輸入迭代器和輸出迭代器的功能,并保留在容器中的位置 |
雙向 |
組合正向迭代器和逆向迭代器的功能,支持多遍算法 |
隨機訪問 |
組合雙向迭代器的功能與直接訪問容器中任何元素的功能,即可向前向后跳過任意個元素 |
迭代器的操作:
每種迭代器均可進行包括表中前一種迭代器可進行的操作。
迭代器操作 |
說明 |
所有迭代器 |
p++ |
后置自增迭代器 |
++p |
前置自增迭代器 |
輸入迭代器 |
*p |
復引用迭代器,作為右值 |
p=p1 |
將一個迭代器賦給另一個迭代器 |
p==p1 |
比較迭代器的相等性 |
p!=p1 |
比較迭代器的不等性 |
輸出迭代器 |
*p |
復引用迭代器,作為左值 |
p=p1 |
將一個迭代器賦給另一個迭代器 |
正向迭代器 |
提供輸入輸出迭代器的所有功能 |
雙向迭代器 |
--p |
前置自減迭代器 |
p-- |
后置自減迭代器 |
隨機迭代器 |
p+=i |
將迭代器遞增i位 |
p-=i |
將迭代器遞減i位 |
p+i |
在p位加i位后的迭代器 |
p-i |
在p位減i位后的迭代器 |
p[i] |
返回p位元素偏離i位的元素引用 |
p<p1 |
如果迭代器p的位置在p1前,返回true,否則返回false |
p<=p1 |
p的位置在p1的前面或同一位置時返回true,否則返回false |
p>p1 |
如果迭代器p的位置在p1后,返回true,否則返回false |
p>=p1 |
p的位置在p1的后面或同一位置時返回true,否則返回false |
只有順序容器和關聯容器支持迭代器遍歷,各容器支持的迭代器的類別如下:
容器 |
支持的迭代器類別 |
vector |
隨機訪問 |
deque |
隨機訪問 |
list |
雙向 |
set |
雙向 |
multiset |
雙向 |
map |
雙向 |
multimap |
雙向 |
stack |
不支持 |
queue |
不支持 |
priority_queue |
不支持 |