擦除vector中的所有元素,直到第一个非零元素C++

MJV*_*MJV 6 c++ vector

我有一个向量,它将在其开头存储可变数量的零元素.这些都需要删除.

我试过了:

while(v.at(0) == 0)
{
    v.erase(v.begin());
}
Run Code Online (Sandbox Code Playgroud)

但这会引发std::out_of_range错误.

任何援助将不胜感激.

YSC*_*YSC 14

您可以使用std::find_if查找第一个非零值,然后查找erase这些元素:

auto first_non_zero = std::find_if(begin(v), end(v), [](int n){ return n != 0; });
v.erase(begin(v), first_non_zero);
Run Code Online (Sandbox Code Playgroud)

(现场演示)