Man kann einen Iterator in einer anderen list benutzen
-
Guckt mal Leute was funktioniert.
#include <list> #include <iostream> int main() { std::list<int> zahlen1; zahlen1.push_back(1); zahlen1.push_back(2); zahlen1.push_back(3); std::list<int> zahlen2; zahlen2.push_back(4); zahlen2.push_back(5); zahlen2.push_back(6); zahlen2.erase(zahlen1.begin()); // Iterator aus zahlen1 in zahlen2 benutzen std::list<int>::iterator i = zahlen1.begin(); for(; i != zahlen1.end(); ++i) { std::cout << *i << std::endl; } }
Und die Ausgabe ist 2 und 3.
Warum wird sowas erfolgreich durchgeführt?
-
Naja wär ja aber auch irgendwie aufwendig, wenn jedes Mal überprüft
wird ob der Iterator tatsächlich auf ein Element des eigenen Containers
verweist.
-
Ein Listelement kann sich selbst aus eine List entfernen. Damit
ist es unerheblich welcher List-Container dies ausführt.
Das einzige ist, das die Typen stimmen müssen.Es gibt so Funktion wie splice, merge, elemiere wenn
da ist es sehr hilfreich, das List-Container gleichen Typs auf einer List agieren könnten.
-
idefix schrieb:
Ein Listelement kann sich selbst aus eine List entfernen. Damit
ist es unerheblich welcher List-Container dies ausführt.
Das einzige ist, das die Typen stimmen müssen.Ist das wirklich legal im C++ Standard??
-
std::cpp schrieb:
Ist das wirklich legal im C++ Standard??
Natürlich nicht. Das verhalten des Programms ist undefiniert.
Und das bedeutet, dass das verhalten total legal ist.Deshalb sollte man eine STL mit DebugModus verwenden wie zB STLPort - dort müßte soetwas theoretisch einen Fehler geben (allerdings bin ich noch nie auf solche kranken ideen gekommen, deshalb kann ich das nicht mit bestimmtheit sagen)