术语iterator往往表示两个不同的事物。一般意义上是迭代器的意思;具体而言指的是由容器定义的具体的iterator类型,如vector<int>。若一种类型支持一组确定的操作(这些操作可以用来遍历容器内的元素,并访问,或修改这些元素的值),就称之为迭代器。
就这个概念而言,可以将数组类比于容器,那么指针就是数组的迭代器(这只是类别,并不准确)。这里放在一起简单的介绍。
用迭代器的方式重新编写下边的代码:
//假设已声明vector<int>型的ivec变量,要把他所有的元素值为0
//下标操作
for(vector<int>:size_type ix = 0;ix != ivec.size();++ix)
ivec[ix]=0;
//迭代器操作
for(vector<int>::iterator iter = ivec.begin();iter != ivec.end();++iter)
*iter = 0;
用迭代器操作更典型。其中begin返回的迭代器指向第一个元素,假设vector不为空,初始化后,iter指向元素ivec[0]。end操作返回的迭代器不指向vector中的任何元素,指向vector的“末端元素的下一个”(off-the-end iterator),相反只是起一个哨兵的作用,表示我们已经处理网vector中的所有元素。
每种容器类型还定义了一种const_iterator类型,不允许用const_iterator类型进行赋值。如
vector<int>::const_iterator iter = ivec.begin();
*iter = 0; //error
类似指针,迭代器也支持算术操作。
- iter + n , iter - n
- iter1 - iter2