我問this question更早。我對std :: set很感興趣,但是我有另一個令人困惑的場景。進一步std :: set困境
即,是以下代碼法律,便攜式C++爲T =標準::向量和T =標準::設置:
template <typename T>
void remove_elements(T& collection, int removal_value)
{
typename T::iterator new_end =
std::remove(collection.begin(), collection.end(), removal_value);
collection.erase(new_end, collection.end());
}
按照SGI參考,設置:迭代並設置:: const_iterator是一樣的,所以我不知道這是否合法。但是,我似乎無法找到另一種方式來獲得我需要的操作,而不管類型如何。我可以求助於模板專業化,但是不必專注於第一個地方是很好的。
在嘗試這些事情之前,最好先閱讀斯科特邁爾的有效期。特別是第2項:注意容器無關代碼的錯覺。有些東西不能通用,有些則可能是可擴展性的問題。 – stefaanv 2009-05-27 07:29:58