Rumah > Artikel > pembangunan bahagian belakang > Mengapa erase-remove_if meninggalkan pasangan pendua apabila mengalih keluar elemen daripada `std::vector`?
Erase-Remove_if Idiom for Pair Removal
Apabila cuba menggunakan simpulan bahasa erase-remove_if untuk menghapuskan pasangan daripada std::vector< std::pair
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));
Punca masalah terletak pada proses pemadaman yang tidak lengkap. std::erase_if hanya mengalihkan elemen padanan ke hujung vektor; ia tidak menghilangkan mereka. Untuk melengkapkan penyingkiran, pendekatan yang betul ialah menggunakan iterator yang dikembalikan oleh std::remove_if sebagai titik permulaan untuk pemadaman:
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
Memahami Mekanisme Erase-Remove_if:
Untuk mendapatkan maklumat lanjut, rujuk artikel Wikipedia pada [Erase-Remove Idiom](https://en.wikipedia.org/ wiki/Erase-remove_idiom).
Atas ialah kandungan terperinci Mengapa erase-remove_if meninggalkan pasangan pendua apabila mengalih keluar elemen daripada `std::vector`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!