我曾經瞭解到從容器中擦除元素的一般方法是通過erase-remove-idiom。但是我驚訝地發現,至少g ++的STL實現不會爲std :: list重載std :: remove(),因爲在這種情況下,通過指針操作重新排序可以節省大量對象分配。如何爲std :: list重載std :: remove?
是否有一個原因,C++標準沒有要求這樣的優化?但我的主要問題是如何重載std :: remove()(它不必是g ++以外的可移植的),所以我可以提供一個使用list :: splice()/ list :: merge()的實現。我嘗試了幾個簽名,但充其量得到一個含糊不清的錯誤,例如:
template <typename T>
typename std::list<T>::iterator
remove(typename std::list<T>::iterator first,
typename std::list<T>::iterator last, const T &v);
P.S:我很抱歉,我不太清楚。請忽略這些函數來自std命名空間以及它們具體做什麼。我只是想了解更多關於C++中的模板/類型轉換/重載規則。
你應該使用['的std ::目錄:: remove'(http://en.cppreference.com/w/cpp/container /列出/刪除)。 –
這可能是[XY問題](http://meta.stackexchange.com/questions/66377)。 –