从向量中移除最后的元素直到条件

use*_*860 1 c++ stl vector

我遇到了一个问题,我需要删除向量的最后一个元素,直到满足某个条件为止(为了这个例子,让它成为元素不为零)

我写了这段代码,它就是诀窍 -

auto next = vec.rbegin();
while (next != vec.rend())
{
    auto current = next++;
    if (*current == 0)
        vec.pop_back();
    else
        break;
}
Run Code Online (Sandbox Code Playgroud)

但我宁愿找到一个我可以使用的stl算法(我可以使用find_if然后擦除,但我想循环一次通过我删除的元素...)

另外,我担心我可能会在这里调用一些UB,我应该担心吗?

Sla*_*ica 5

您的代码可以更简单:

while( !vec.empty() && vec.back() == 0 ) 
    vec.pop_back();
Run Code Online (Sandbox Code Playgroud)

使用std::removestd::remove_if将删除基于条件的所有元素,因此您应该使用std::find_ifVlad在其答案中提供的内容.