qquad 迭代器的作用是用来访问容器中的元素,可以理解为广义上的指针。类比于指针,我们使用指针访问数组,那么对于数组来说指针就是一种迭代器。
qquad
但是在C++中有许多复杂的容器,例如vector、string、list、map等,对于这些不同的容器,我们都会使用为其量身打造的迭代器。对比于指针,不同容器的迭代器的功能更多。
qquad
qquad 对于所有的迭代器,他们的使用方法和指针一样
//例如 vectora; vector ::iterator it; it++; //得到指向下一个元素的迭代器 *it; //解引用获得所指元素的值 it=a.begin(); //开始位置的迭代器 it=a.end(); //束位置的迭代器 for(auto it = a.begin();it!=a.end();it++) cout << *it; for(auto i:a) //此时的i不是迭代器!是具体的值 cout << i;
,自增操作 i++ 得到指向下一个元素的迭代器,解引用 *i 获得迭代器 i 所指元素的值。
qquad
大部分的容器type中都会提供成员函数type.begin(),用来获取容器开始位置的迭代器,会提供成员函数type.end(),用来获取容器结束位置的迭代器。
qquad
注意:迭代器这种类型不可以比较大小!可以赋值,判断是否相等。所以遍历的时候终结条件应该是 it!=end();
vector::iterator it=a.begin(); auto n=next(it,-1); //返回迭代器it的第n个后继迭代器 auto p=prev(it,-1); //返回迭代器it的第n个前驱迭代器 cout<<*n<<*p;
next(it,n); :返回迭代器第n个后继迭代器,n为负数时则反方向
prev(it,-1);:返回迭代器it的第n个前驱迭代器,n为负数时则反方向



