аннулирование итератора std :: vector

Там было несколько вопросов по этому вопросу ранее; я понимаю, что призваниеstd::vector::erase будет делать недействительными только итераторы, которые находятся в позициипосле стертый элемент. Однако после удаления элемента итератор в этой позиции остается в силе (при условии, конечно, что он не указывает наend() после стирания)?

Мое понимание того, как будет реализован вектор, кажется, позволяет предположить, что итератор определенно пригоден для использования, но я не совсем уверен, может ли это привести к неопределенному поведению.

В качестве примера того, о чем я говорю, следующий код удаляет все нечетные целые числа из вектора. Этот код вызывает неопределенное поведение?

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;
}

Код отлично работает на моей машине, но это не убеждает меня в том, что он действителен.