Maison > Article > développement back-end > Pourquoi effacer-remove_if laisse-t-il des paires en double lors de la suppression d'éléments d'un « std :: vector » ?
Erase-Remove_if Idiom pour la suppression de paires
Lorsque vous essayez d'utiliser l'idiome Erase-remove_if pour éliminer des paires d'un std::vector< std::pair
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));
La racine du problème réside dans le processus d'effacement incomplet. std::erase_if déplace uniquement les éléments correspondants vers la fin du vecteur ; cela ne les supprime pas. Pour terminer la suppression, l'approche correcte consiste à utiliser l'itérateur renvoyé par std::remove_if comme point de départ de l'effacement :
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
Comprendre le mécanisme Erase-Remove_if :
Pour plus d'informations, reportez-vous à l'article Wikipédia sur [Erase-Remove Idiom](https://en.wikipedia.org/ wiki/Erase-remove_idiom).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!