怎么把const_iterator强制转化成iterator

      今天在使用STL中的mutilmap时遇到了一个比较郁闷的问题,STL的一些函数只能接受iterator作为参数,不能传const_iterator类型的参数,既不存在两种迭代器的隐式转换,使用const_cast也是不行的,编译怎么也通不过,看stl的源码const_iterator和iterator两个之间还真没啥血缘关系,在网上搜索了一下资料,然来STL也考虑了这一问题,使用了一个折衷的方法来解决这一问题,使用迭代器<iterator>里面的advance和distance这两个函数来完成这件事情,原理很简单,首先将iterator指向容器的开始位置,然后把它向前移到和const_iterator距离容器起始位置的偏移量一样的位置就可以了,代码如下:

 

 

      注意distance这个模板函数,应该显示指定参数类型,否则可能不能通过编译,因为计算距离的时候,函数必须知道你的类型是什么才能正确计算距离。有时候编译器可以通过模板演绎推出参数类型,但这里不行,要显示指定。

      建议:尽量避免这种转换的发生,这不是一种漂亮的编程方法,虽然是被STL支持的。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值