删除范围循环中项目的最快方法

Tho*_*ras 2 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?
     }
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 8

放弃循环并使用擦除 - 删除习语.

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

  • @ThomasBanderas:然后使用`[=](tmp const&t){return a <tmp.min && b tmp.max; }`.更一般:阅读lambda表达式和/或函数对象. (2认同)