const_iterator 转成 iterator 的方法

Posted Ivan B.G. Liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了const_iterator 转成 iterator 的方法相关的知识,希望对你有一定的参考价值。

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中,正确的转换方法是:
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)而言,时间是线性的。

以上是关于const_iterator 转成 iterator 的方法的主要内容,如果未能解决你的问题,请参考以下文章

向量、迭代器和 const_iterator

你能帮我处理我的 const_iterator 内部类吗?

迭代const_iterator

使用 QT 时 const_iterator 的分段错误

从 std::vector<cv::Point>::const_iterator 检索值

C++语言const_iterator和const iterator的区别,