invalidação do iterador std :: vector

Houve algumas perguntas sobre esse problema antes; meu entendimento é esse chamadostd::vector::erase invalidará apenas iteradores que estão em uma posiçãodepois de o elemento apagado. No entanto, após apagar um elemento, o iterador nessa posição ainda é válido (desde que, é claro, que ele não aponte paraend() após a exclusão)?

Meu entendimento de como um vetor seria implementado parece sugerir que o iterador é definitivamente utilizável, mas não tenho muita certeza se isso pode levar a um comportamento indefinido.

Como um exemplo do que estou falando, o código a seguir remove todos os números inteiros ímpares de um vetor. Esse código causa comportamento 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;
}

O código funciona bem na minha máquina, mas isso não me convence de que é válido.

questionAnswers(2)

yourAnswerToTheQuestion