Hi I read in C++ primer that adding elements to a vector invalidates the iterators. I don't understand why deleting elements doesn't invalidate them as the following code works
std::vector<int> a = {1,2,3,4,5,6};
auto b = a.begin();
while (b != a.end()){
if (*b%2 != 0)
a.erase(b);
else
b++;
}
NOTE: This code if from C++ primer itself and cpp reference as well
In general this code snippet
is invalid. It works because the container std::vector satisfies the concept of contiguous ranges. If instead of the vector you will use for example
std::list<int>when the iteratorbwill be invalid.It would be correctly to write