我是靠谱客的博主 风中小刺猬,这篇文章主要介绍const_iterator 转成 iterator 的方法,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
vector<int> vi; typedef vector<int>::iterator Iter; typedef vector<int>::const_iterator ConstIter; Iter i; ConstIter ci;
使用强制转换 i = (const_cast<Iter>(ci)) 会造成编译错误,不能将const_iterator强制转换成iterator。
在STL中,正确的转换方法是:
复制代码
1
2
i = vi.begin(); advance(i, distance<ConstIter>(i,ci) );
这种方法非常简单和直接。为了得到一个与const_iterator指向相同位置的iterator,首先创建一个新的iterator,将它指向容器初始位置,然后取得const_iterator距离容器起始位置的偏移量,并将iterator向前移动相同的偏移量即可。
其中,advance和distance都在<iterator>头文件中。distance用来计算两个迭代器之间的距离,advance用来将一个迭代器移动指定的距离。
对于随机访问的迭代器(vector、string、deque),这种方法的时间是常数时间。对于双向迭代器(unordered_map)而言,时间是线性的。

转载于:https://www.cnblogs.com/ladawn/p/8320516.html

最后

以上就是风中小刺猬最近收集整理的关于const_iterator 转成 iterator 的方法的全部内容,更多相关const_iterator内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部