Heim >Backend-Entwicklung >C++ >Warum hinterlässt erase-remove_if beim Entfernen von Elementen aus einem „std::vector' doppelte Paare?
Erase-Remove_if-Idiom zum Entfernen von Paaren
Beim Versuch, das erase-remove_if-Idiom zu verwenden, um Paare aus einem std::vector< std::pair
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));
Die Wurzel des Problems liegt im unvollständigen Löschvorgang. std::erase_if verschiebt nur passende Elemente an das Ende des Vektors; es entfernt sie nicht. Um die Entfernung abzuschließen, besteht der richtige Ansatz darin, den von std::remove_if zurückgegebenen Iterator als Ausgangspunkt für die Löschung zu verwenden:
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
Den Erase-Remove_if-Mechanismus verstehen:
Weitere Einblicke finden Sie im Wikipedia-Artikel zum [Erase-Remove Idiom](https://en.wikipedia.org/ wiki/Erase-remove_idiom).
Das obige ist der detaillierte Inhalt vonWarum hinterlässt erase-remove_if beim Entfernen von Elementen aus einem „std::vector' doppelte Paare?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!