类似于指针类型,迭代器也提供了对对象的间接访问。就迭代器而言,其对象是容器的元素或者 string
对象的字符。
迭代器有有效和无效之分,有效的迭代器指向某个元素或者指向容器尾元素的下一个位置,其它情况都属于无效。
使用迭代器
有迭代器的类型同时拥有返回迭代器的成员:
begin
成员负责返回指向第一个元素的迭代器。end
成员返回指向容器尾元素下一位置的迭代器。end
成员返回的迭代器称为尾后迭代器。
迭代器运算符
迭代器类型
拥有迭代器的标准库类型使用 iterator
和 const_iterator
来表示迭代器的类型。
vector<int>::iterator it; //it能读写vector<int>的元素
string::iterator it2; //it2能读写string对象中的元素
vector<int>::const_iterator it3; //it3只能读元素,不能写元素
string::const_iterator it4; //it4只能读元素,不能写元素
begin 和 end 运算符
begin
和 end
返回的具体类型由对象是否是常量决定,如果对象是常量,begin
和 end
返回const_iterator
,如果对象不是常量,返回 iterator
。
vector<int> v;
const vector<int> cv;
auto it1 = v.begin(); //it1的类型是vector<int>::iterator
auto it2 = cv.begin(); //it1的类型是vector<int>::const_iterator
为了便于专门得到 const_iterator
类型的返回值,C++11引入了两个新的函数:cbegin
,cend
。
vector<int> v;
auto it = v.cbegin(); //it是vector<int>::const_iterator