Avatar ·

Regeln zur Iterator-Invalidierung in C++: Wann werden Iteratoren ungültig?

Hallo zusammen! Ich habe angefangen, C++ zu lernen, und schreibe ein kleines Programm zur Verarbeitung einer Bestellliste. Ich verwende `std::vector`. Hier ist ein vereinfachter Code: ```cpp #include #include int main() { std::vector orders = {101, 102, 103, 104, 105}; // Suche Bestellung 103 und lösche sie for (auto it = orders.begin(); it != orders.end(); ++it) { if (*it == 103) { orders.erase(it); // <-- hier lösche ich ein Element } } // Ausgabe der verbleibenden Bestellungen for (int order : orders) { std::cout << order << " "; } return 0; } ``` In Visual Studio 2022 stürzt dieser Code manchmal mit einem Fehler ab oder gibt seltsame Zahlen aus. Ich habe gelesen, dass dies mit der "Iterator-Invalidierung" zusammenhängt, verstehe aber nicht ganz, was das bedeutet. Meine Fragen: 1. Warum funktioniert mein Code nicht? 2. Welche Operationen an Containern machen Iteratoren ungültig? 3. Wie lösche ich Elemente während der Iteration korrekt? Ich wäre für eine detaillierte Erklärung dankbar.