c++ - 从容器中删除元素的单语句方法

标签 c++ stl erase-remove-idiom

是否存在像以下代码中那样从容器中移除元素的单一算法?

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);

关于c++ - 从容器中删除元素的单语句方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326112/

相关文章:

c++ - std::shared_ptr 的实例化类型丢失 const

c++ - 并发写入 std::vector 到不同的索引会导致崩溃?

printing - 使用 GDB 和 Clang 漂亮地打印 STL

c++ - erase-remove_if 习语 - 有什么东西被删除了吗?

c++ - 在 for 循环中调用一个函数来删除 vector (或列表)中的元素

c++ - Reserve()的高估是否有不利之处?

c++ - C99 stdint.h 头文件和 MS Visual Studio

c++ - sets、multisets、maps 和 multimaps 如何在内部工作

c++ - 使用 boost::lambda_ 压缩字符串中的空格

c++ - 使用 Ranges-V3 移除标记为移除的元素