Ich habe eine Schleife in einer Funktion, die von Anfang bis Ende über ein std::list
iteriert.
In jedem Zyklus führe ich einige Überprüfungen durch und mache vielleicht ein paar Manipulationen am aktuellen Listeneintrag, und in manchen Fällen möchte ich aus der Liste entfernen .
Nun, wie erwartet, wird mein Iterator ungültig gemacht.
Verwenden Sie postfix Inkrement.
%Vor% it
wird erhöht, sodass es sich nicht mehr auf das gelöschte Element bezieht, dann wird der vorherige Wert von it
an list.erase
übergeben. Stellen Sie sicher, dass Sie entweder list.erase(it++)
oder ++it
in Ihrer Schleife ausführen - indem Sie beide Elemente überspringen und möglicherweise das letzte Ende der Liste erhöhen.
Fange den Rückgabewert von erase
und verwende ihn als Iterator. Der Rückgabewert ist ein Iterator zum nächsten gültigen Ort nach dem Löschen.
Auszug:
Rückgabewert
Ein bidirektionaler Iterator, der auf die neue Position des Elements verweist, das auf das letzte vom Funktionsaufruf gelöschte Element folgte. Dies ist das Ende der Liste, wenn die Operation das letzte Element in der Sequenz löschte.