含义
\qquad 迭代器的作用是用来访问容器中的元素,可以理解为广义上的指针。类比于指针,我们使用指针访问数组,那么对于数组来说指针就是一种迭代器。
\qquad
但是在C++中有许多复杂的容器,例如vector、string、list、map等,对于这些不同的容器,我们都会使用为其量身打造的迭代器。对比于指针,不同容器的迭代器的功能更多。
\qquad
迭代器的使用
\qquad 对于所有的迭代器,他们的使用方法和指针一样
//例如
vector<typename> a;
vector<typename>::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<int>::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为负数时则反方向