zoukankan      html  css  js  c++  java
  • Effective_STL 学习笔记(二十七) 用 distance 和 advance 把 const_iterator 转化成 iterator

    并不存在从 const_iterator 到 iterator 之间的隐式转换

    一种安全的、可移植的方法获取他所对应的 iterator:

    1   typedef deque<int> IntDeque;     // 方便的typedef
    2   typedef IntDeque::iterator Iter;
    3   typedef IntDeque::const_iterator ConstIter;
    4 
    5   InDeque d;
    6   ConstIter ci;
    7   . . .
    8   Iter i( d.begin() );           // 初始化 i 为 d.begin()
    9   advance( i, distance(i, ci) );    // 把 i 移到指向 ci 的位置

    要得到与 const_iterator 指向同一位置的 iterator,首先将 iterator 指向容器的起始位置,然后把它向前移到和 const_iterator 距离容器起始位置的偏移量一样的位置即可。

    这个任务得到两个函数模板 advance 和 distance 的帮助,他们都在<iterator>中声明

    distance 返回两个指针指向同一个容器的 iterator 之间的距离,

    advance 则用于将一个 iterator 移动到指定的距离,

    如果i和ci指向同一个容器,表达式advance(i, distance(i, ci))会将i移动到与 ci 相同的位置 

    显示的指明 distance 调用的模板参数类型

    1   advance( i, distance<ConstIter>(i, ci) );
  • 相关阅读:
    连接ACCESS数据库[原创]
    破解金山词霸2007
    上班族饮食十大“夺命”恶习
    C#3.0 新特性速览(1) (2)
    抽象工厂模式(AbstractFactory)创建型模式
    委托创建小记
    八个笑话,八个人生哲理
    自定义对话框[原创]
    一个数字键盘的自定义控件[原创]
    男人绝对需要红颜知己
  • 原文地址:https://www.cnblogs.com/kidycharon/p/10033132.html
Copyright © 2011-2022 走看看