ich einen Code wie folgt aus:Zuordnung (Operator =) entkräftet Iteratoren für Behälter
std::vector<int> v1 = { 1, 2, 3, 4 };
std::vector<int> v2 = { 7, 8, 9, 10 };
std::vector<int>::iterator it = std::next(v1.begin());
v1 = v2;
int test = *it;
std::cout << test;
Der obige Code wird einen Fehler werfen: Iterator nicht dereferencable.
Wenn ich jedoch Vektor mit der Liste wie folgt ersetzen:
std::list<int> v1 = { 1, 2, 3, 4 };
std::list<int> v2 = { 7, 8, 9, 10 };
std::list<int>::iterator it = std::next(v1.begin());
v1 = v2;
int test = *it;
std::cout << test;
Der Code lief ebenso ohne Fehler zu erwarten.
Von , und die std::list::operator=, wurde mir gesagt, dass nach dem Aufruf von Operator =, alle Iteratoren, Referenzen und Zeiger in Bezug auf diesen Container ungültig sind, mit Ausnahme der Ende Iteratoren. Aber warum funktioniert der obige Code mit std :: list? Habe ich etwas Wesentliches falsch verstanden?
Und selbst wenn es „richtig funktioniert“ zu sein scheint es jederzeit ohne jede Art von Mitteilung brechen könnte. –