Итерация по const_iterator - PullRequest
       40

Итерация по const_iterator

0 голосов
/ 20 апреля 2019

ALL,

У меня есть функция со следующей сигнатурой:

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 здесь для удаления константности?Это было бы хакерством, но если это сработало.

Но я чувствую, что должно быть лучшее решение.

TIA !!

1 Ответ

0 голосов
/ 20 апреля 2019

Вы должны использовать метод myvec.cbegin() вместо myvec.begin(), чтобы гарантировать, что вы не модифицируете объект, на который указывает итератор.
Конечно, для myvec.end() используйте myvec.cend() соответственно.

Сам итератор не должен быть const_iterator, напротив, вы хотите изменить объекты, которые он вам дает - set_...() звучит как неконстантное действие.

...