使用迭代器可以访问某个元素,也能从一个元素移动到另外一个元素。迭代器有begin和end成员,begin成员负责返回指向第一个元素,end成员负责返回指向容器尾元素下一个位置。

下面是把第一个字符改为大写

string s("hello world");

if (s.begin() != s.end() ){
auto it = s.begin();
*it = toupper(*it); //修改当前字符改为大写
}

循环处理每个元素

for (auto it = s.begin();it != s.end(); ++it) {
*it = toupper(*it);
}

begin和end返回的具体类型由对象是否是常量决定,如果对象是常量就返回const_iterator,如果不是常量返回iterator

vector<int>::iterator it; //it能读写vector<int>元素

string::iterator it2; //it2能读写string对象中的字符

vector<int>::const_iterator it3; //it3能读vector<int>元素

string::const_iterator it4; //it4能读string对象中的字符

cbegin和cend这2个函数用于专门返回const_iterator

解引用迭代器可获得迭代器所指的对象,然后就可以执行对象的方法。

对于vector<string>来说,检查it所指字符串是否为空,(*it)中的括号不能少。

(*it).empty()

访问类的方法和成员时,还可以使用->

for (auto it = text.cbegin();it!=text.cend()&&!it->empty();++it){
cout << *it << endl;
}

对vector对象的有些操作会使迭代器失效,不能往vector中添加数据

迭代器可以和一个整数进行运算,返回向前或向后移动了若干个位置的迭代器。

auto mid = v.begin()+v.size()/2;