c++ - 在 for - range 循环中删除项目的最快方法

标签 c++ c++11

我在想这个循环:

struct tmp {
    int min;
    int max;
    tmp(int a, int b) :min(a), max(b){};
};

std::vector <tmp> data;

for (auto tmp_a : data){
     if(tmp_a.min == 0){
           //how to delete tmp_a item from data from there?
     }
}

当然我可以迭代这个循环,但我认为这不是最快的方法。 (当然我可能是错的 - 然后纠正我)

问题: 如何删除范围循环内的项目?(使用最快的方法)

最佳答案

放弃循环并使用 erase-remove 习惯用法。

data.erase(std::remove_if(data.begin(), data.end(), [] (tmp t) {
    return t.min == 0;
}), data.end());

关于c++ - 在 for - range 循环中删除项目的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29244587/

相关文章:

c++ - 如何测试数字是否以值结尾?

c++ - 当A在for循环中调用函数B时,如何计算函数A的空间复杂度?

c++ - 对 c 结构进行排序

C++11 如何在 std::unordered_map 中存储指向方法的指针?

c++11 - RXCPP:阻塞功能超时

c++ - 构造函数返回值中的异常

c++ - C++ 枚举类可以有方法吗?

c++ - 如何使用 C++11 std::move 语义。我尝试编写代码,得到的输出有些不同

c++ - 参数类型自动推导和匿名 lambda 函数

C++11 函数返回时会发生什么