迭代器(Iterator),用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)间接访问聚合对象中的各个元素。
迭代器的作用:能够让迭代器与算法不干扰的相互发展,用以操作复杂的数据结构,容器提供迭代器,算法使用迭代器。
- 定义和初始化
每种容器都定义了自己的迭代器类型
例如:
vector<int>::iterator iter;
每种容器都定义了一对名为begin和en的函数,用于返回迭代器。
例如:
vector<int> vec;
for(vector<int> : : iterator it=vec.begin ; it! = vec.end ; it++){ }
注意end并不指向容器的任何元素,而是指向容器的最后元素的下一位置,称为超出末端迭代器。如果vector为空,则begin返回的迭代器和end返回的迭代器相同。一旦向上面这样定义和初始化,就相当于把该迭代器和容器进行了某种关联,就像把一个指针初始化为指向某一空间地址一样。
- 常用操作
1.常规运算
*iter //对iter进行解引用,返回迭代器iter指向的元素的引用
iter->men //对iter进行解引用,获取指定元素中名为men的成员。等效于(*iter).men
++iter //给iter加1,使其指向容器的下一个元素
iter++ --iter //给iter减1,使其指向容器的前一个元素
iter-- iter1==iter2 //比较两个迭代器是否相等,当它们指向同一个容器的同一个元素或者都指向同同一个容器的超出末端的下一个位置时,它们相等
iter1!=iter2
2.遍历容器(此处以vector 容器举例)
vector<int> vec;
for(vector<int> : : iterator it=vec.begin ; it! = vec.end ; it++){ }
- const_iterator
每种容器还定义了const_iterator类型,该类型不同于之前的是const_iterator只能用于读取容器中的元素,不能用于改变其值
for(vector<int>::const_iterator iter=ivec.begin();iter!=ivec.end();++iter)
cout<<*iter<<endl; //合法,读取容器中元素值
for(vector<int>::const_iterator iter=ivec.begin();iter!=ivec.end();++iter)
*iter=0; //不合法,不能进行写操作