std :: invalidación de iterador de vector

Ha habido algunas preguntas sobre este tema antes; mi entendimiento es ese llamadostd::vector::erase solo invalidará los iteradores que están en una posicióndespués El elemento borrado. Sin embargo, después de borrar un elemento, el iterador en esa posición sigue siendo válido (siempre que, por supuesto, no apunte aend() después del borrado)?

Mi comprensión de cómo se implementaría un vector parece sugerir que el iterador es definitivamente utilizable, pero no estoy completamente seguro de si podría conducir a un comportamiento indefinido.

Como ejemplo de lo que estoy hablando, el siguiente código elimina todos los enteros impares de un vector. ¿Este código causa un comportamiento indefinido?

typedef std::vector<int> vectype;
vectype vec;

for (int i = 0; i < 100; ++i) vec.push_back(i);

vectype::iterator it = vec.begin();
while (it != vec.end()) {
    if (*it % 2 == 1) vec.erase(it);
    else ++it;
}

El código funciona bien en mi máquina, pero eso no me convence de que sea válido.

Respuestas a la pregunta(2)

Su respuesta a la pregunta