【发布时间】:2009-05-27 06:04:09
【问题描述】:
我之前问过this question。我对 std::set 很感兴趣,但我还有另一个令人困惑的场景。
即,以下代码对于 T=std::vector 和 T=std::set: 是否合法、可移植的 c++:
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 参考,set::iterator 和 set::const_iterator 是一样的,所以我不知道这是否合法。但是,无论类型如何,我似乎都找不到另一种方法来获得我需要工作的操作。我可以求助于模板专业化,但是最好不必一开始就专门化。
【问题讨论】:
-
在尝试这些事情之前,最好阅读 scott meyer 的有效 stl。特别是第 2 项:当心容器独立代码的错觉。有些东西不能通用,有些东西可能是可扩展性的问题。