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

Pat*_*ick 1 c++ stl erase-remove-idiom

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

vec_it = std::remove_if( vec.begin(), vec.end(), pred );
vec.erase( vec_it, vec.end() );
Run Code Online (Sandbox Code Playgroud)

Cyr*_* Ka 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());
}
Run Code Online (Sandbox Code Playgroud)

所以你可以使用

std::vector<int> myVec;
// (...) fill the vector. (...)
erase_if(myVec, myPred);
Run Code Online (Sandbox Code Playgroud)


jal*_*alf 5

你的意思是这样的?

vec.erase( std::remove_if( vec.begin(), vec.end(), pred ), vec.end() );
Run Code Online (Sandbox Code Playgroud)

这是实现它的惯用方法.