迭代器簡介
除了使用下標來訪問vector對象的元素外,標准庫還提供了訪問元素的方法:使用迭代器。迭代器是一種檢查容器內元素並且遍歷元素的數據類型。
百科釋義:
迭代器(iterator)是一種對象,它能夠用來遍歷標准模板庫容器中的部分或全部元素,每個迭代器對象代表容器中的確定的地址。迭代器修改了常規指針的接口,所謂迭代器是一種概念上的抽象:那些行為上像迭代器的東西都可以叫做迭代器。
1.容器的iterator類型
每種容器類型都定義了自己的迭代器類型,如vector:
vector<int> ::iterator iter;變量名為iter,可以讀寫vector中的元素。
2.begin和end操作
每種容器都定義了一隊命名為begin和end的函數,用於返回迭代器。如果容器中有元素的話,由begin返回的元素指向第一個元素。
vector<int>::iterator iter=v.begin();
若v不為空,iter指向v[0]。
由end返回的迭代器指向最後一個元素的下一個,不存在,若v為空,begin和end返回的相同。
*iter;返回迭代器iter所指元素的引用
++iter即將迭代器向前移動一個位置(相反的--iter)
==和!=操作符來比較兩個迭代器,若兩個迭代器指向同一個元素,則它們相等,否則不想等。
舉例:
string s("some string");
if(s.begin()!=s.end) //確保s非空
{
auto it=s.begin(); //it表示s的第一個字符
*it = toupper(*it); //改成大寫
}
我們認定某個類型是迭代器當且僅當它支持一套操作,這套操作使得我們能訪問容器的元素或者從一個元素移動到另外一個元素。