Search code examples
c++vectorerasec++03

Does std::vector::erase() invalidate the iterator at the point of erase?


C++03 Standard § 23.2.4.3/3 describes std::vector::erase(iterator position) and says specifically

Invalidates all the iterators and references after the point of the erase.

Is the iterator at the point of the erase not invalidated? Specifically if I have a vector with a single element and I copy begin() iterator into a local variable and then call

vec.erase(vec.begin())

Will that iterator I have in a local variable get invalidated or not?

Will the iterators be invalidated after the point of erasure or after and including the point of erasure?


Solution

  • I'd say that your example with erasing the only element in the vector shows that the iterator at the insertion point must be invalidated.

    Anyway, in C++11, the wording has been changed (23.3.6.5/3):

    Effects: Invalidates iterators and references at or after the point of the erase.