在C++STL容器的相关博文中,已经用到了迭代器.本文只是做一些梳理,不会讲解迭代器具体的实现.

概要

迭代器(iterator)可以简单理解成泛类型指针,而且在STL中,每个容器都拥有迭代器

1
2
3
vector<int>::iterator vec_it;
list<int>::iterator l_it;
map<int,string>::iterator map_it;

下面以vector为例,说一下迭代器的基本使用:

1
2
3
4
vector<int> ivec={4,2,3};
vector<int>::iterator vec_it;
for(vec_it=ivec.begin();vec_it!=ivec.end();++vec_it)
cout<<*vec_it<<endl;

迭代器模式

迭代器有5类,它们的关系如下图 iterator-class

Input Iterator(输入迭代器):只能单步向前迭代元素,不允许修改由该类迭代器引用的元素。

Output Iterator(输出迭代器):该类迭代器和Input Iterator极其相似,也只能单步向前迭代元素,不同的是该类迭代器对元素只有写的权力。

Forward Iterator(前向迭代器):该类迭代器可以在一个正确的区间中进行读写操作,它拥有Input Iterator的所有特性,和Output Iterator的部分特性,以及单步向前迭代元素的能力。

Bidirectional Iterator(双向迭代器):该类迭代器是在Forward Iterator的基础上提供了单步向后迭代元素的能力。

Random Access Iterator(随机存取迭代器):该类迭代器能完成上面所有迭代器的工作,它自己独有的特性就是可以像指针那样进行算术计算,而不是仅仅只有单步向前或向后迭代。

之所以有不同种类迭代器,那是因为它们有不同的操作,当所有迭代器都有++it,it++操作.
vector和deque提供的是RandomAccessIterator
list提供的是BidirectionalIterator
set和map提供的 iterators是 ForwardIterator

总结

关于迭代器模式的内容几乎来自:
c++迭代器(iterator)详解
迭代器的实现原理博主还没有完全弄清楚,也就不这里卖弄了,等以后进行源码分析再说.不过以上内容足够去使用迭代器了.