如果我有两个向量values
和bad_values
,是否有一种干净有效的方法可以有效地减去坏值而无需编写自己的for循环?
我知道我可以使用
void set_subtraction(std::vector<int>* values, std::vector<int>* bad_values) {
std::remove_if(values->begin(), values->end(), [bad_values](int x) {return std::find(bad_values->begin(), bad_values->end(), x) != bad_values->end()}
}
但这似乎不像只写出一个循环那么可读,并没有利用两个列表进行排序。它的价值也是O(n ^ 2)[尽管通过使用bad_values的集合可以轻松解决]。
可以安全地假设两个向量仅包含不同的元素。
答案 0 :(得分:1)
这里有一个例子
#include<iostream>
#include<vector>
#include<algorithm>
int main()
{
std::vector<int> vec1={1,2,3,4};
std::vector<int> vec2={1,2};
std::vector<int> result;
std::set_difference(std::begin(vec1),std::end(vec1),
std::begin(vec2),std::end(vec2),
std::back_inserter(result));
for (auto &x : result)
std::cout<< x<<"\n";
}
答案 1 :(得分:-1)
你可能想要std :: set_difference。