迭代器的概念 迭代器是用來訪問string對象或vector對象的元素的,類似於下標運算和指針。 其對象是容器中的元素或string對象中的字元; 使用迭代器可以訪問某個元素,迭代器也能從一個元素移動到另外一個元素。 迭代器的使用 不同於指針,獲取迭代器不是使用取地址符,有迭代器的類型同時擁有返回迭 ...
迭代器的概念
迭代器是用來訪問string對象或vector對象的元素的,類似於下標運算和指針。
其對象是容器中的元素或string對象中的字元;
使用迭代器可以訪問某個元素,迭代器也能從一個元素移動到另外一個元素。
迭代器的使用
不同於指針,獲取迭代器不是使用取地址符,有迭代器的類型同時擁有返回迭代器的成員;
比如,這些類型擁有名為begin和end的成員,begin成員負責返回指向第一個元素(或第一個字元)的迭代器,end成員則負責返回指向容器“尾元素的下一個位置”的迭代器;
如果迭代器為空,則begin和end返回的是同一個迭代器;
標準容器迭代器的運算符
和指針類似,也能通過解引用迭代器來獲取它所指向的元素,執行解引用的迭代器必須合法並確實指向著某個元素。
string s("some String"); if (s.begin() !=s.end() ) //確保s非空 { auto it=s.begin(); //it 表示s的第一個字元 *it=toupper(*it); }
迭代器類型
begin與end運算符
結合解引用與成員訪問操作
解引用迭代器可以獲得迭代器所指向的對象(類似與指針)。例如:若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前半部分的元素
使用迭代器運算(二分搜索)
代碼
指針也是迭代器
指向數組元素的指針擁有更多功能