EDIT: Diese Frage bezieht sich speziell auf std :: Listen - ähnliche Fragen auf Stack-Überlauf std :: siehe VektorenC++ Liste Iteration und Löschen
Ich bin mit C++ und Probleme, ein Element aus einem std Löschen :: liste während des Durchlaufens auf. Ich habe eine Liste von einer benutzerdefinierten Klasse (‚Objekte‘ für die Zwecke dieser Frage), und mein Code sieht wie folgt aus:
for(auto i : Objects)
if(i.EraseFlag == true)
{
i = Objects.erase(i);
}
ich den Fehler bekommen: ‚keine passende Funktion für Aufruf von std: : list :: list (Objekt &) '
Ich glaube, das ist der richtige Weg (wie in C++ 11), Listen zu durchlaufen, ein Element zu löschen und einen Iterator zurückzugeben, der das Löschen berücksichtigt, aber klar Ich mache etwas falsch. Früher würde ich bei der Verwendung von Vektoren 'Objects.esease (Objects.begin() + i)' verwenden, wobei i eine ganze Zahl in einer for-Schleife ist, aber angesichts der Zugriffsanforderungen von Listen wird dies nicht funktionieren.
Hilfe geschätzt.
Dank
erase() nimmt einen Iterator als Parameter –
Sie sollten nicht die Sequenz während der Bereich basiert 'for' Schleife zu verändern. – PaulMcKenzie
* Ich glaube, das ist der richtige Weg (wie in C++ 11), Listen zu durchlaufen, ein Element zu löschen und einen Iterator zurückzugeben, der das Löschen berücksichtigt, * - Warum solche Dinge löschen, wenn Sie dies tun können 'Erase/Remove'-Idiom, wo keine Loops benötigt werden? – PaulMcKenzie