1

是否有一种算法可以从容器中删除元素,如下面的代码中发生的那样?

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

3 回答 3

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);
于 2008-11-28T16:30:17.497 回答
5

你的意思是这样吗?

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

这是惯用的做法。

于 2008-11-28T16:17:02.377 回答
-2

我不知道。也许有。但如果有的话,那将是一个地狱般的声明。没有人能够理解或维护它。如果这两行符合您的要求,请坚持使用。他们非常好。

于 2008-11-28T16:16:50.690 回答