五類迭代器以下:算法
一、輸入迭代器:只讀,一次傳遞
爲輸入迭代器預約義實現只有istream_iterator和istreambuf_iterator,用於從一個輸入流istream中讀取。一個輸入迭代器僅能對它所選擇的每一個元素進行一次解析,它們只能向前移動。一個專門的構造函數定義了超越末尾的值。老是,輸入迭代器能夠對讀操做的結果進行解析(對每一個值僅解析一次),而後向前移動。
二、輸出迭代器:只寫,一次傳遞
這是對輸入迭代器的補充,不過是寫操做而不是讀操做。爲輸出迭代器的預約義實現只有ostream_iterator和ostreambuf_iterator,用於向一個輸出流ostream寫數據,還有一個通常較少使用的raw_storage_iterator。他們只能對每一個寫出的值進行一次解析,而且只能向前移動。對於輸出迭代器來講,沒有使用超越末尾的值來結束的概念。總之,輸出迭代器能夠對寫操做的值進行解析(對每個值僅解析一次),而後向前移動。
三、前向迭代器:屢次讀/寫
前向迭代器包含了輸入和輸出迭代器二者的功能,加上還能夠屢次解析一個迭代器指定的位置,所以能夠對一個值進行屢次讀/寫。顧名思義,前向迭代器只能向前移動。沒有爲前向迭代器預約義迭代器。
四、雙向迭代器:operator--
雙向迭代器具備前向迭代器的所有功能。另外它還能夠利用自減操做符operator--向後一次移動一個位置。由list容器中返回的迭代器都是雙向的。
五、隨機訪問迭代器:相似於一個指針
隨機訪問迭代器具備雙向迭代器的全部功能,再加上一個指針全部的功能(一個指針就是一個隨機訪問迭代器),除了沒有一種「空(null)」迭代器和空指針對應。基本上能夠這樣說,一個隨機訪問迭代器就像一個指針那樣能夠進行任何操做,包括使用操做符operator[]進行索引,加某個數值到一個指針就能夠向前或者向後移動若干個位置,或者使用比較運算符在迭代器之間進行比較。函數
迭代器類別spa |
說明指針 |
輸入迭代器索引 |
從容器中讀取元素。輸入迭代器只能一次讀入一個元素向前移動,輸入迭代器只支持一遍算法,同一個輸入迭代器不能兩遍遍歷一個序列ci |
輸出迭代器it |
向容器中寫入元素。輸出迭代器只能一次一個元素向前移動。輸出迭代器只支持一遍算法,統一輸出迭代器不能兩次遍歷一個序列io |
正向迭代器table |
組合輸入迭代器和輸出迭代器的功能,並保留在容器中的位置容器 |
雙向迭代器 |
組合正向迭代器和逆向迭代器的功能,支持多遍算法 |
隨機訪問迭代器 |
組合雙向迭代器的功能與直接訪問容器中任何元素的功能,便可向前向後跳過任意個元素 |
迭代器的操做:
每種迭代器都可進行包括表中前一種迭代器可進行的操做。迭代器的操做本質上是經過重載運算符來實現的,迭代器支持何種操做和可以執行什麼運算是由迭代器所重載的運算符來決定的。
迭代器類型 | 操做類型 | 說明 |
全部迭代器 |
p++ ++p |
後置自增迭代器 前置自增迭代器s's |
輸入迭代器 |
*p p=p1 p==p1 p!=p1 |
復引用迭代器,做爲右值 將一個迭代器賦給另外一個迭代器 比較迭代器的相等性 比較迭代器的不等性 |
輸出迭代器 |
*p p=p1 |
復引用迭代器,做爲左值 將一個迭代器賦給另外一個迭代器 |
正向迭代器 |
提供輸入輸出迭代器的全部功能 |
|
雙向迭代器 |
--p p-- |
前置自減迭代器 後置自減迭代器 |
隨機訪問迭代器 |
p+=i p-=i p+i p-i p[i] p<p1 p<=p1 p>p1 p>=p1 |
將迭代器遞增i位 將迭代器遞減i位 在p位加i位後的迭代器 在p位減i位後的迭代器 返回p位元素偏離i位的元素引用 若是迭代器p的位置在p1前,返回true,不然返回false p的位置在p1的前面或同一位置時返回true,不然返回false 若是迭代器p的位置在p1後,返回true,不然返回false p的位置在p1的後面或同一位置時返回true,不然返回false |
只有順序容器和關聯容器支持迭代器遍歷,各容器支持的迭代器的類別以下:
容器 |
支持的迭代器類別 |
vector |
隨機訪問 |
deque |
隨機訪問 |
list |
雙向 |
set |
雙向 |
multiset |
雙向 |
map |
雙向 |
multimap |
雙向 |
stack |
不支持 |
queue |
不支持 |
priority_queue |
不支持 |