Changes to a container while BOOST_FOREACH is iterating through it?

2.6k Views Asked by At

What would happen if a container that BOOST_FOREACH is iterating through is changed inside the BOOST_FOREACH scope?

Does BOOST_FOREACH "freeze" the initial state?

2

There are 2 best solutions below

0
On BEST ANSWER

In this case behavior is undefined. Look at Hoisting and Iterator Invalidation in official documentation of BOOST_FOREACH.

0
On

I guess it depends on the container.

The real question is, whether the (remaining) iterator range for traversal is invalidated or not.

This depends on the change. std algorithms are specified with their behaviour: they mention what iterators are invalidated when.

Update

It can also depend on the type of iterator,

  • vector::erase invalidates all subsequent iterators
  • list::erase does not