迭代器Iterator:
迭代器类似于指针对象,它允许程序有顺序地访问容器的元素。通过递增迭代器,我们可以从迭代器的一个元素遍历到下一个元素。一些迭代器也可以递减,或者允许从一个元素跳跃到任意一个元素。此外,还可以比较两个迭代器是否相等。
迭代器可以很好的兼容C++的内置类型,特别是常见的C++指针被视为C++数组的迭代器。当然,在标准的C++库中所有的容器都定义了一个迭代器类型,即嵌套类型的迭代器,代表各自的指针类型。
迭代器Iterator的分类:
迭代器可以分为不同的种类,这是因为他们使用不同的算法、不同的要求附加在其身上。例如,find()算法需要一个可以递增的迭代器,而reverse()算法需要一个可以递减的迭代器等。总之,在STL和C++标准库中有5种迭代器。
- 输入迭代器(Input Iterator):只能向前单步迭代元素,不允许修改由该迭代器所引用的元素;
- 输出迭代器(Output Iterator):只能向前单步迭代元素,对由该迭代器所引用的元素只有写权限;
- 向前迭代器(Forward Iterator):该迭代器可以在一个区间中进行读写操作,它拥有输入迭代器的所有特性和输出迭代器的部分特性,以及向前单步迭代元素的能力;
- 双向迭代器(Bidirectional Iterator):在向前迭代器的基础上增加了向后单步迭代元素的能力;
- 随机访问迭代器(Random Access Iterator):不仅综合以后4种迭代器的所有功能,还可以像指针那样进行算术计算;
vector、deque提供的是随机访问迭代器,list提供的是双向迭代器,set和map提供的是向前迭代器
这几种迭代器所支持的操作:
Output: *p= , ++
Input: =*p , -> , ++ , == , !=
Forward: *p= , =*p , -> , ++ , == , !=
Bidirectional: *p= , =*p -> , [] , ++ , -- , == , !=
Random: += , -= , *p= , =*p -> , [] , ++ , -- , + , - , == , != , < , > , <= , >=