是否有一种算法可以从容器中删除元素,如下面的代码中发生的那样?
vec_it = std::remove_if( vec.begin(), vec.end(), pred );
vec.erase( vec_it, vec.end() );
是否有一种算法可以从容器中删除元素,如下面的代码中发生的那样?
vec_it = std::remove_if( vec.begin(), vec.end(), pred );
vec.erase( vec_it, vec.end() );
这样做的惯用方式就像 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);
你的意思是这样吗?
vec.erase( std::remove_if( vec.begin(), vec.end(), pred ), vec.end() );
这是惯用的做法。
我不知道。也许有。但如果有的话,那将是一个地狱般的声明。没有人能够理解或维护它。如果这两行符合您的要求,请坚持使用。他们非常好。