给出两个排序向量的减法

时间:2015-04-17 19:06:27

标签: c++ stl

如果我有两个向量valuesbad_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的集合可以轻松解决]。

可以安全地假设两个向量仅包含不同的元素。

2 个答案:

答案 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。