迭代器是用來訪問string對象或vector對象的元素的,相似於下標運算和指針。數組
其對象是容器中的元素或string對象中的字符;spa
使用迭代器能夠訪問某個元素,迭代器也能從一個元素移動到另一個元素。3d
不一樣於指針,獲取迭代器不是使用取地址符,有迭代器的類型同時擁有返回迭代器的成員;指針
好比,這些類型擁有名爲begin和end的成員,begin成員負責返回指向第一個元素(或第一個字符)的迭代器,end成員則負責返回指向容器「尾元素的下一個位置」的迭代器;code
若是迭代器爲空,則begin和end返回的是同一個迭代器;對象
標準容器迭代器的運算符blog
和指針相似,也能經過解引用迭代器來獲取它所指向的元素,執行解引用的迭代器必須合法並確實指向着某個元素。字符串
string s("some String"); if (s.begin() !=s.end() ) //確保s非空
{ auto it=s.begin(); //it 表示s的第一個字符
*it=toupper(*it); }
begin與end運算符string
結合解引用與成員訪問操做it
解引用迭代器能夠得到迭代器所指向的對象(相似與指針)。例如:若it是Vector對象的迭代器,
檢查其元素是否爲空,只需檢查it所指向的字符串是否爲空;
(*it).empty(); // it->empty();
某些對vector對象的操做會使迭代器失效
但凡是使用了迭代器的循環體,都不要向迭代器所屬的容器添加元素;
迭代器運算
迭代器的算術運算
能夠令迭代器和一個整數值相加(或相減),其返回值是向前(或向後)移動了若干個位置的迭代器。
auto mid = vi.begin() + vi.size() / 2; //vi.size()=10,則mid指向元素是vi[10]
if(it<mid) //處理vi前半部分的元素
使用迭代器運算(二分搜索)
代碼
指針也是迭代器
指向數組元素的指針擁有更多功能