迭代器按照定義方式可以分為以下四種:
(1)正向迭代器,定義方法如下:
容器類名::iterator 迭代器名;
(2)常量正向迭代器,定義方法如下:
容器類名::const_iterator 迭代器名;
(3)反向迭代器,定義方法如下:
容器類名::reverse_iterator 迭代器名;
(4)常量反向迭代器,定義方法如下:
容器類名::const_reverse_iterator 迭代器名;
通過迭代器,我們可以讀取它指向的元素,*迭代器名 就表示迭代器所指向的元素,通過非常量迭代器還能修改其指向的元素
迭代器都可以進行++操作,反向迭代器和正向迭代器的區別在於:
對正向迭代器進行++操作時,迭代器會指向容器中的后一個元素;
對反向迭代器進行++操作時,迭代器會指向容器中的前一個元素;
注意:容器適配器stack,queue,priority_queue 沒有迭代器。
常用的迭代器按功能強弱分為:輸入,輸出,正向,雙向,隨機訪問 五種。
(1)正向迭代器
假設p是一個正向迭代器,則p支持以下操作:
++p,p++,*p,兩個迭代器可以進行相互賦值,以及==,!=比較
(2)雙向迭代器
雙向迭代器具有正向迭代器的所有功能,並且可以進行 --p 和 p-- 的操作
(3)隨機訪問迭代器
隨機訪問迭代器具有雙向迭代器的所有功能,並且還可以進行以下操作,假設i是一個整型變量或常量:
p+=i:p往后移動i個元素
p-=i:p往前移動i個元素
p+i:返回p后面第i個元素的迭代器
p-i:返回p前面的第i個元素的迭代器
p[i]:返回p后面第i個元素的引用
兩個隨機訪問迭代器還可以進行<,>,<=,>=,- 的操作
容器 迭代器功能
vector 隨機訪問
deque 隨機訪問
list 雙向
set/multiset 雙向
map/multimap 雙向
stack 不支持迭代器
queue 不支持迭代器
priority_queue 不支持迭代器
迭代器的輔助函數:
advance(p,n):使迭代器p向前或向后移動n個元素
distance(p,q):計算兩個迭代器之間的距離,即迭代器p經過多少次++操作后和迭代器q相等,如果調用時p已經指向q的后面,則該函數會陷入死循環
iter_swap(p,q):用於交換兩個迭代器p,q指向的值