从自定义值修剪向量的最佳方法

cpl*_*cpl 5 c++

在给定要删除的值的情况下,是否有一种更聪明/更精细的方式来修剪矢量,类似于修剪字符串,例如从

0 0 0 1 2 3 56 0 2 4 0 0
Run Code Online (Sandbox Code Playgroud)

1 2 3 56 0 2 4
Run Code Online (Sandbox Code Playgroud)

我找不到类似修剪的功能,查找/擦除是最佳选择吗?

lis*_*rus 8

假设我们正在与

std::vector<int> v;
Run Code Online (Sandbox Code Playgroud)

我们要修剪零,所以

auto const is_not_zero = [](int i){ return i != 0; };
Run Code Online (Sandbox Code Playgroud)

要找到第一个非零元素并删除它之前的所有内容,

auto const first_non_zero = std::find_if(v.begin(), v.end(), is_not_zero);
v.erase(b.begin(), first_non_zero);
Run Code Online (Sandbox Code Playgroud)

要找到最后一个非零值,请对反向迭代器执行相同的操作:

auto const last_non_zero = std::find_if(v.rbegin(), v.rend(), is_not_zero);
v.erase(last_non_zero.base(), v.end());
Run Code Online (Sandbox Code Playgroud)

std::reverse_iterator::base从相反的一个返回基础的普通迭代器)。