16.4.4 概念、改进和模型(下)

其它有用的迭代器

除了ostream_iterator和istream_iterator之外,头文件iterator还提供了其它一些专用的预定义

迭代器类型:

  1. reverse_iterator
  2. back_insert_iterator
  3. front_insert_iterator
  4. 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算法的通用性

原文地址:https://www.cnblogs.com/suui90/p/13546593.html