2017-06-16 1 views
0

Ich habe mich gefragt, warum der Test unterWie Container end() Iterator entwickelt, wenn (zB) Gebindegröße ändern

end_iter_mem == intList.end()

return true

coliru

Sollte sich der end() "Wert" des Containers nicht ändern, wenn (unter anderem) die Anzahl der Elemente des Containers zunimmt?

#include <iostream> 
#include <list> 

using namespace std; 

int main() 
{ 
    list<int> intList = {1,2,3}; 

    auto end_iter_mem = intList.end(); 

    intList.push_back(4); 

    cout << (end_iter_mem == intList.end()) << endl; 

    return 0; 
} 
+0

Related: https://StackOverflow.com/Questions/6438086/iterator-invalidation-Rules – Rakete1111

Antwort

1

Iteratoren für Listen nicht nach list::push_back Operationen für ungültig erklärt, von cppreference

keine Iteratoren oder Referenzen für ungültig erklärt werden.

Dies bedeutet jedoch nicht, dass dies für alle Container gilt. Zum Beispiel für vectors the documentation says

Wenn die neue Größe() größer ist als Kapazität() dann alle Iteratoren und Verweise (einschließlich dem past-the-End-Iterator) für ungültig erklärt werden. Sonst wird nur der Iterator über die Vergangenheit ungültig gemacht.


tl; dr Sie haben die Dokumentation zu konsultieren, um herauszufinden, ob Iteratoren für ungültig erklärt, und die Iteratoren werden nach einer Container Modifikation für ungültig erklärt.

Verwandte Themen