是否有一个算法可以从容器中删除元素,如下面的代码所示?
vec_it = std::remove_if( vec.begin(), vec.end(), pred );
vec.erase( vec_it, vec.end() );
答案 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)
我不知道。也许有。但如果有,那将是一个声明的地狱。没有人能够理解或维护它。如果这两条线做你想要的,只要坚持下去。他们非常好。