Erase-Remove_if Modismo para eliminar pares
Al intentar emplear el modismo erase-remove_if para eliminar pares de un std::vector>, surge un problema peculiar. A pesar de apuntar a pares con un valor .first de 4 para su eliminación, la implementación inicial deja un par duplicado:
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));
La raíz del problema radica en el proceso de borrado incompleto. std::erase_if solo desplaza los elementos coincidentes al final del vector; no los elimina. Para completar la eliminación, el enfoque correcto es utilizar el iterador devuelto por std::remove_if como punto de partida para el borrado:
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
Comprensión del mecanismo Erase-Remove_if:
Para obtener más información, consulte el artículo de Wikipedia sobre [Erase-Remove Idiom](https://en.wikipedia.org/ wiki/Erase-remove_idiom).
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3