全部
我有一个带有以下签名的函数:
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 !!
答案 0 :(得分:0)
您应该使用myvec.cbegin()
方法而不是myvec.begin()
,以确保您不修改迭代器指向的对象。
当然,对于myvec.end()
,请相应地使用myvec.cend()
。
迭代器本身不必是const_iterator,相反,您想要修改它为您提供的对象-set_...()
听起来像是非const活动。