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) );

 

转载于:https://www.cnblogs.com/kidycharon/p/10033132.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值