迭代器
如果一種類型支持一組確定的操作(這些操作可用來遍歷容器內的元素,並訪問這些元素的值),我們就稱這種類型爲迭代器。
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 類型時,我們可以得到一個迭代器,它自身的值可以改變,但不能用來改變其所指向的元素的值。可以對迭代器進行自增以及使用解引用操作符來讀取值,但不能對該元素賦值。