迭代const_iterator

Posted

tags:

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

所有,

我有一个具有以下签名的函数:

void foo(const std::vector<Bar *> &myvec);

在这个函数里面,我需要循环遍历向量的成员并执行一些操作。

所以,我试过这个:

for( std::vector<Bar *>::const_iterator it = myvec.begin(); it < myvec.end(); ++it )
{
    // modify properties of Bar * pointer
    (*it)->SetSomeValue( baz );
}

但是这个代码断言,因为迭代器是常量。

现在显然向量是常量,这意味着该函数不应该修改myvec。

什么是最好的解决方案?

我可以在这里使用const_cast来删除constness吗?这将是一种hack-ish,但如果它有效。

但我觉得必须有更好的解决方案。

TIA !!

答案

您应该使用myvec.cbegin()方法而不是myvec.begin(),以确保您不修改迭代器指向的对象。 当然,对于myvec.end(),请相应地使用myvec.cend()

迭代器本身不需要是const_iterator,相反,你想要修改它给你的对象 - set_...()听起来像一个非const活动。

以上是关于迭代const_iterator的主要内容,如果未能解决你的问题,请参考以下文章

迭代const_iterator

C++ STL中的 iterator 和 const_iterator

const 迭代器和 const_iterator (vector/set)

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

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

迭代器