遍历const_iterator

时间:2019-04-20 00:28:15

标签: c++11 vector 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删除常量吗?有点像hack-ish,但如果可行。

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

TIA !!

1 个答案:

答案 0 :(得分:0)

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

迭代器本身不必是const_iterator,相反,您想要修改它为您提供的对象-set_...()听起来像是非const活动。