參考文章:http://blog.csdn.net/qq_23100787/article/details/51388163
迭代器這種東西,就是為了使訪問簡單!!
容器::iterator iter;
for(iter= 容器.begin();iter!=容器.end();iter++){
cout<<*iter或者是 iter->first等等之類的 //迭代器就是這么個套路
}
然后就是set,set就是一個集合,僅此而已,而其他的,像是map比較有意思,提供了兩種數據結構的對應,而其他的我們不要簡單的認為是隊列和棧,我們要認為這是一種容器,能夠包含多種數據結構,用了這種思想,我們就會想的更明白。


[箭頭表示左邊的迭代器一定滿足右邊迭代器需要的條件。]
要注意,上面這圖表並不是表明它們之間的繼承關系:而只是描述了迭代器的種類和接口。處於圖表下層的迭代器都是相對於處於圖表上層迭代器的擴張集。例如:forward迭代器不但擁有input和output迭代器的所有功能,還擁有更多的功能。比如某個算法需要一個雙向迭代器(Bidirctional Iterator),你可以把一個任意存取迭代器(Random Access Iterator)作為參數;但反之不行。


- 能夠讓迭代器與算法不干擾的相互發展,最后又能無間隙的粘合起來。
- 重載了*,++,==,!=,=運算符。用以操作復雜的數據結構。
- 容器提供迭代器,算法使用迭代器。
- 各個迭代器的功能如下:
迭代器類別 |
說明 |
輸入 |
從容器中讀取元素。輸入迭代器只能一次讀入一個元素向前移動,輸入迭代器只支持一遍算法,同一個輸入迭代器不能兩遍遍歷一個序列 |
輸出 |
向容器中寫入元素。輸出迭代器只能一次一個元素向前移動。輸出迭代器只支持一遍算法,統一輸出迭代器不能兩次遍歷一個序列 |
正向 |
組合輸入迭代器和輸出迭代器的功能,並保留在容器中的位置 |
雙向 |
組合正向迭代器和逆向迭代器的功能,支持多遍算法 |
隨機訪問 |
組合雙向迭代器的功能與直接訪問容器中任何元素的功能,即可向前向后跳過任意個元素 |
迭代器的操作:
迭代器 操作 |
說明 |
所有迭代器 |
|
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 |
不支持 |
適配器容器類型,用vector,deque或list對象創建了一個先進后出容器 |
queue |
不支持 |
適配器容器類型,用deque或list對象創建了一個先進先出容器 |
priority_queue |
不支持 |
適配器容器類型,用vector或deque對象創建了一個排序隊列 |