C++:使用 remove_if 根据条件过滤向量
C++: Using remove_if to filter vector on a condition
使用 erase+remove_if 删除向量中小于特定值的所有元素的正确语法是什么。但是,这个具体值并不是一个常量,而是一个变量。
参考代码加深对问题的理解:
for (int i = 0; i < arr.size(); i++)
{
int currEle = arr[i];
/*
How do I use erase + remove_if to remove the elements from arr that
are smaller than currEle?
*/
}
下面的例子演示了erase-remove_if的用法。 limit
通过引用捕获,因此可以在 lambda 之外进行修改:
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
std::vector<int> vec{0,1,2,3,4,5,6,7,8,9};
int size = vec.size();
for (int limit = 0; limit <= size; limit++)
{
vec.erase(std::remove_if(std::begin(vec), std::end(vec), [&limit](int i) {
return i < limit;
}), std::end(vec));
for (auto& v : vec)
std::cout << v;
std::cout << std::endl;
}
return 0;
}
预期输出:
0123456789
123456789
23456789
3456789
456789
56789
6789
789
89
9
使用 erase+remove_if 删除向量中小于特定值的所有元素的正确语法是什么。但是,这个具体值并不是一个常量,而是一个变量。
参考代码加深对问题的理解:
for (int i = 0; i < arr.size(); i++)
{
int currEle = arr[i];
/*
How do I use erase + remove_if to remove the elements from arr that
are smaller than currEle?
*/
}
下面的例子演示了erase-remove_if的用法。 limit
通过引用捕获,因此可以在 lambda 之外进行修改:
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
std::vector<int> vec{0,1,2,3,4,5,6,7,8,9};
int size = vec.size();
for (int limit = 0; limit <= size; limit++)
{
vec.erase(std::remove_if(std::begin(vec), std::end(vec), [&limit](int i) {
return i < limit;
}), std::end(vec));
for (auto& v : vec)
std::cout << v;
std::cout << std::endl;
}
return 0;
}
预期输出:
0123456789
123456789
23456789
3456789
456789
56789
6789
789
89
9