我之前问过这个问题。我对 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 是一样的,所以我不知道这是否合法。但是,无论类型如何,我似乎都找不到另一种方法来获得我需要工作的操作。我可以求助于模板专业化,但是最好不必一开始就专门化。