理解用於向量刪除的erase-remove_if 慣用法
在C 語言中,erase-remove_if 慣用法被廣泛用於從基於給定標準的向量。讓我們深入研究這個習慣用法被錯誤實現的具體範例,並探索潛在的陷阱。
問題:
考慮一個名為 stopPoints 的向量,其中包含整數對和方向價值。目標是使用erase-remove_if 慣用法從向量中刪除包含特定整數(例如 4)的所有對。然而,執行程式碼後,結果出乎意料。
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));
執行此操作後,向量中仍包含 .first 值設為 4 的對的實例。
解決方案:
錯誤在於擦除功能的錯誤使用。在erase-remove_if習慣用法中,std::erase函數需要兩個迭代器-一個是指向要刪除的第一個元素的迭代器,另一個是指向容器末端的迭代器。
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
在這個更正的實現中,從std::remove_if 返回的迭代器(指向要刪除的第一個元素)到向量末尾的範圍被刪除,有效刪除與謂詞匹配的所有元素(在本例中為.first == 4)。
解釋:
結論:
erase-remove_if 習慣用法是一個強大的工具,可以有效地刪除從向量中刪除滿足特定條件的元素。了解函數 std::remove_if 和 std::erase 如何交互對於其正確實現至關重要。
以上是為什麼使用 Erase-Remove_if 習慣用法從向量中刪除元素不能如預期般運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!