其它有用的迭代器
除了ostream_iterator和istream_iterator之外,头文件iterator还提供了其它一些专用的预定义
迭代器类型:
- reverse_iterator
- back_insert_iterator
- front_insert_iterator
- insert_iterator
reverse_iterator:
对reverse_iterator执行递增操作将导致它被递减:
- ### vector类有一个rbegin()成员函数和一个rend()成员函数,前者返回一个指向超尾的
- ### 反向迭代器,后者返回一个指向第一个元素的反向迭代器
- ### 可以这样反向显示内容:copy(dice.rbegin(), dice.rend(), out_iter); // display in reverse order
对反向迭代器有一种特殊补偿:
- ### 按照原来的迭代器区间定义,使用copy(...)时,超尾迭代器指向的部分将被使用,而第一个
- ### 元素的内容却会被忽略
- ### 因此反向指针通过先递减,在解除引用来解决这两个问题
如果可以在显示声明迭代器和使用STL函数来处理内部问题之间选择,优先采用后者
back_insert_iterator:
将元素插入到容器尾部,是输出容器模型
- 只能用于允许在尾部快速插入的容器(vector)
- ### 为名为dice的vector<int>创建一个该种迭代器: back_insert_iterator<vector<int>> back_iter(dice)
- ### 必须声明容器类型的原因是,迭代器必须使用合适的容器方法
front_insert_iterator:
将元素插入到容器首部,是输出容器模型
- 只能用于允许在起始位置做时间固定插入的容器类型(vector不满足,queue满足)
- ### 声明方式与back_inset_iterator相同
insert_iterator:
将元素插入到insert_iterator构造函数的参数指定的位置前面,是输出容器模型
- 限制较少,但相对于front_insert_iterator等专用的迭代器速度稍慢
- ### 声明方式除与back_insert_iterator基本相同外,还须一个指示插入位置的构造函数参数:
- ### insert_iterator<vector<int>> insert_iter(dice, dice.begin())
这些预定义迭代器提高了STL算法的通用性