Ich schreibe einen Knotenpfad-Suchalgorithmus. Ich muss eine Multimap durchlaufen und unter bestimmten Bedingungen Elemente daraus löschen, aber ich wiederhole die Multimap. Unten ist mein Code soweit, es scheint die meiste Zeit zu funktionieren, aber gelegentlich erhalte ich einen Fehler, wenn ich nct_it ++ mache. Ist es sicher, den Iterator-Zeiger aus der Tabelle zu löschen, bevor der Iterator inkrementiert wird?
%Vor%Ist es sicher, den Iterator-Zeiger aus der Tabelle zu löschen, bevor der Iterator inkrementiert wird?
Nein, erase
macht den Iterator ungültig und sollte danach nicht mehr inkrementiert werden.
Um dies richtig durchzuführen, verwenden Sie den Rückgabewert von erase
- der Iterator, der auf das letzte entfernte Element folgt:
In C ++ 03 gibt erase
nichts zurück. Sie müssen das also manuell tun, indem Sie eine Kopie des Iterators speichern und inkrementieren, bevor Sie das Original löschen: