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.
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen