Изменения в контейнере, пока BOOST_FOREACH выполняет итерацию по нему? - PullRequest
6 голосов
/ 21 апреля 2011

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

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

Ответы [ 2 ]

9 голосов
/ 21 апреля 2011

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

2 голосов
/ 21 апреля 2011

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

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

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

Обновление

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

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