用於刪除對的Erase-Remove_if 慣用法
當嘗試使用擦除刪除_if 慣用法從std::vector 中使用消除對時std::pair
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));
問題的根源在於不完整的擦除過程。 std::erase_if 僅將匹配元素移至向量末尾;它不會刪除它們。要完成刪除,正確的做法是使用std::remove_if 傳回的迭代器作為擦除的起點:
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
理解Erase-Remove_if 機制:
進一步的見解,請參閱關於[刪除刪除習慣用語](https://en.wikipedia.org/) 的維基百科文章wiki/Erase-remove_idiom).
以上是為什麼從 `std::vector` 中刪除元素時,erase-remove_if 會留下重複對?的詳細內容。更多資訊請關注PHP中文網其他相關文章!