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

  • 相关阅读:
    Nginx-limit_req限速配置示例
    Linux-配置虚拟IP实例
    jQuery中获取a标签的值
    js时间格式化
    a标签与js的冲突
    spring MVC页面的重定向
    EL表达式遍历集合获取下标
    商城项目之实战-购物车模块
    js中得计算问题算式结果拼接成字符串怎么解决
    js中数值类型相加变成拼接字符串的问题
  • 原文地址:https://www.cnblogs.com/suui90/p/13546593.html
Copyright © 2011-2022 走看看