c++ - 从 vector 中删除最后一个元素直到条件

标签 c++ vector stl

我遇到了一个问题,我需要删除 vector 的最后一个元素,直到满足某个条件(为了这个例子,假设元素不为零)

我写了这段代码,它成功了 -

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

但我更愿意找到一个我可以使用的 STL 算法(我可以使用 find_if 然后删除,但我想在我删除的元素中循环一次...)

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

最佳答案

您的代码可以更简单:

while( !vec.empty() && vec.back() == 0 ) 
    vec.pop_back();

使用 std::removestd::remove_if 将根据条件删除所有元素,因此您应该使用 std::find_if正如 Vlad 在他的回答中提供的那样。

关于c++ - 从 vector 中删除最后一个元素直到条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26744199/

相关文章:

c++ - vector 中的双 V 形会被误读?

具有自定义比较功能的 C++ 优先级队列在 Push() 上的行为不正确

C++ STL map.find() 找不到我的东西

c++ - 使用 OpenGL 渲染到 Win32 窗口的一部分

c++ - 在一个函数中静态初始化多个静态变量

c++ - 如何添加到 Qt 书籍示例中,例如将项目添加到列表的可能性?

c++ - 输入流到 vector<char> - vector 迭代器不可取消引用

.net - XNA - 为什么它使用 Vector2 而不是 Point?

c++ - vector<bool>::push_back GCC 3.4.3 中的错误?

C++ 对字符串中的字符进行反向排序