Изменения в контейнере, пока BOOST_FOREACH выполняет итерацию по нему?

Что произойдет, если контейнер, который перебирает BOOST_FOREACH, изменяется внутри области BOOST_FOREACH?

BOOST_FOREACH "замораживает" начальное состояние?

2 ответа

Решение

В этом случае поведение не определено. Посмотрите на Подъем и Инвалидация Итератора в официальной документации BOOST_FOREACH,

Я думаю, это зависит от контейнера.

Реальный вопрос заключается в том, является ли (оставшийся) диапазон итераторов для обхода недействительным или нет.

Это зависит от изменений. std алгоритмы определяются их поведением: они упоминают, какие итераторы являются недействительными, когда.

Обновить

Это также может зависеть от типа итератора,

  • vector::erase делает недействительными все последующие итераторы
  • list::erase не
Другие вопросы по тегам