zoukankan      html  css  js  c++  java
  • 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算法的通用性

  • 相关阅读:
    BZOJ5057 : 区间k小值5
    Urozero Autumn 2016. UKIEPC 2016
    BZOJ2808 : 那些年我们画格子
    BZOJ4970 : [ioi2004]empodia 障碍段
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    BZOJ4316 : 小C的独立集
    网络流(3)——找到最小st-剪切
    网络流(2)——用Ford-Fullkerson算法寻找最大流
    网络流(1)——网络、流网络和网络流
    退而求其次(4)——椭圆中的最大矩形
  • 原文地址:https://www.cnblogs.com/suui90/p/13546593.html
Copyright © 2011-2022 走看看