std :: vector iterator invalidation

Zu diesem Thema wurden bereits einige Fragen gestellt. Mein Verständnis ist, dass das Aufrufen vonstd::vector::erase macht nur Iteratoren ungültig, die sich an einer Position befindennac das gelöschte Element. Ist jedoch nach dem Löschen eines Elements der Iterator an dieser Position noch gültig (vorausgesetzt natürlich, dass er nicht auf @ zeigtend() nach dem Löschen)?

ein Verständnis, wie ein Vektor implementiert werden würde, scheint darauf hinzudeuten, dass der Iterator definitiv verwendbar ist, aber ich bin nicht ganz sicher, ob er zu undefiniertem Verhalten führen könnt

Als Beispiel für das, wovon ich spreche, entfernt der folgende Code alle ungeraden Ganzzahlen aus einem Vektor. Verursacht dieser Code undefiniertes Verhalten?

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

Der Code läuft gut auf meinem Computer, aber das überzeugt mich nicht, dass er gültig ist.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage