У меня есть функция, которая выполняет итерацию через вектор и вызывает другую функцию, чтобы каким-то образом выполнить ее содержимое. В результате этого выполнения к вектору могут быть добавлены новые элементы. Код функции выглядит следующим образом:Расширение вектора во время итерации через него
void foo() {
for (std::vector<Item*>::iterator it = item_list.begin(); it != item_list.end(); ++it) {
if (/*some condition*/) {
bar(it);
}
}
}
В то время как я был прибегая к помощи этой проблемы, я увидел, что итератор может получить недействительным, если изменение размера происходит, но автор не конкретно о том, почему ни когда и что правильный способ обращения Эта проблема.
Ваш образец не представляет проблемы. –
@ DieterLücking: 'item_list' может быть глобальным, который модифицируется' bar', но вы правы, что неясно, имеет ли образец проблему, и ее необходимо уточнить. –
Ваш вопрос довольно расплывчатый. Где добавляются новые предметы? В начало/конец/в любом месте вектора? Если они добавлены до текущего итератора, вы в порядке с циклом 'for', не перебирая их? – Praetorian