单个语句方法从容器中删除元素

时间:2008-11-28 16:00:43

标签: c++ stl erase-remove-idiom

是否有一个算法可以从容器中删除元素,如下面的代码所示?

vec_it = std::remove_if( vec.begin(), vec.end(), pred );
vec.erase( vec_it, vec.end() );

3 个答案:

答案 0 :(得分:6)

这样做的惯用方法就像jalf所说的那样。您可以构建自己的函数来更轻松地完成此任务:

template<typename T, typename Pred> void erase_if(T &vec, Pred pred)
{
    vec.erase(std::remove_if(vec.begin(), vec.end(), pred), vec.end());
}

所以你可以使用

std::vector<int> myVec;
// (...) fill the vector. (...)
erase_if(myVec, myPred);

答案 1 :(得分:5)

你的意思是这样吗?

vec.erase( std::remove_if( vec.begin(), vec.end(), pred ), vec.end() );

这是执行它的惯用方法。

答案 2 :(得分:-2)

我不知道。也许有。但如果有,那将是一个声明的地狱。没有人能够理解或维护它。如果这两条线做你想要的,只要坚持下去。他们非常好。