C++迭代器——iterator

迭代器

如果一種類型支持一組確定的操作(這些操作可用來遍歷容器內的元素,並訪問這些元素的值),我們就稱這種類型爲迭代器

begin end 操作

每種容器都定義了一對命名爲 begin end 的函數,用於返回迭代器。如果容器中有元素的話,由begin 返回的迭代器指向第一個元素

vector<int>::iteratoriter = ivec.begin();

end 操作返回的迭代器指向 vector 的“末端元素的下一個”。“超出

末端迭代器”(off-the-end iterator)。表明它指向了一個不存在的元素。

如果 vector 爲空,begin 返回的迭代器與 end 返回的迭代器相同。

end 操作返回的迭代器並不指向vector 中任何實際的元素,相反,它只是起一個哨兵的作用,表示我們已處理完 vector 中所有元素。


例子:

#include<iostream>

#include<vector>

#include<string>

usingnamespace std;


void main(void)

{

        string str = "helloworld";

        vector<string> data;


        cout<<str<<endl;

        data.push_back(str);


       int i =0;

       for(vector<string>::iteratoriter = data.begin();iter != data.end();++iter)

        {

               ////打印數據

               //cout<<data[i]<<endl;

               //i++;

               //打印數據

                  cout<<*iter<<endl;

        }


        getchar();

}


for 循環首先定義了 iter,並將它初始化爲指向ivec 的第一個元素。for 循環的條件測試 iter 是否與 end 操作返回的迭代器不等。每次迭代 iter 都自增 1,這個 for 循環的效果是從 ivec 第一個元素開始,順序處理 vector 中的每一元素。最後, iter 將指向 ivec 中的最後一個元素,處理完最後一個元素後,iter 再增加 1,就會與 end 操作的返回值相等,在這種情況下,循環終止。


const_iterator注意:

for (vector<string>::const_iteratoriter = text.begin();

iter != text.end(); ++ iter)

*iter = " "; // error: *iter isconst

使用 const_iterator 類型時,我們可以得到一個迭代器,它自身的值可以改變,但不能用來改變其所指向的元素的值。可以對迭代器進行自增以及使用解引用操作符來讀取值,但不能對該元素賦值。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章