• 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算法的通用性

  • 相关阅读:
    团队选题报告
    第二次结对作业
    高级软件工程团队第一次作业
    第一次结队作业
    高级软件工程第二次作业
    高级软件工程第一次作业
    洛谷 题解 2165 [AHOI2009]飞行棋
    洛谷 题解 P1684 考验
    洛谷 题解 P4613 【[COCI2017-2018#5] Olivander】
    洛谷 题解 P5534 【【XR-3】等差数列】
  • 原文地址:https://www.cnblogs.com/suui90/p/13546593.html
Copyright © 2020-2023  润新知