Löschen von Elementen in einer Multimap während des Iterierens

8

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%     
jasonlg3d 24.01.2013, 22:19
quelle

1 Antwort

21
  

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:

%Vor%

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:

%Vor%     
jrok 24.01.2013, 22:30
quelle

Tags und Links