Изменения в контейнере, пока BOOST_FOREACH выполняет итерацию по нему?
Что произойдет, если контейнер, который перебирает BOOST_FOREACH, изменяется внутри области BOOST_FOREACH?
BOOST_FOREACH "замораживает" начальное состояние?
2 ответа
Решение
В этом случае поведение не определено. Посмотрите на Подъем и Инвалидация Итератора в официальной документации BOOST_FOREACH
,
Я думаю, это зависит от контейнера.
Реальный вопрос заключается в том, является ли (оставшийся) диапазон итераторов для обхода недействительным или нет.
Это зависит от изменений. std
алгоритмы определяются их поведением: они упоминают, какие итераторы являются недействительными, когда.
Обновить
Это также может зависеть от типа итератора,
vector::erase
делает недействительными все последующие итераторыlist::erase
не