在给定要删除的值的情况下,是否有一种更聪明/更精细的方式来修剪矢量,类似于修剪字符串,例如从
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)
我找不到类似修剪的功能,查找/擦除是最佳选择吗?
假设我们正在与
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从相反的一个返回基础的普通迭代器)。
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |