迭代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的主要内容,如果未能解决你的问题,请参考以下文章
C++ STL中的 iterator 和 const_iterator
const 迭代器和 const_iterator (vector/set)