C++ C++;:如何剥去一个;“设置”;通过删除多个元素?

C++ C++;:如何剥去一个;“设置”;通过删除多个元素?,c++,algorithm,function,stl,set,C++,Algorithm,Function,Stl,Set,在STL算法中,有几个“集合”操作,如集合并集、集合差分、集合交集、集合对称差分,但我希望在两个向量之间执行: vector<int> A={1,2,3,4}; vector<int> B={1,3}; 向量A={1,2,3,4}; 向量B={1,3}; 我希望得到A-B,所以A-B={2,4} 有没有一个方便的方法来做这个“减号”? 谢谢 您完全可以对向量使用集合算法,只要对向量进行排序即可。然后,您可以使用将输出推送到另一个向量中: #include <al

在STL算法中,有几个“集合”操作,如集合并集、集合差分、集合交集、集合对称差分,但我希望在两个向量之间执行:

vector<int> A={1,2,3,4};
vector<int> B={1,3};
向量A={1,2,3,4};
向量B={1,3};
我希望得到A-B,所以A-B={2,4}

有没有一个方便的方法来做这个“减号”?
谢谢

您完全可以对
向量
使用
集合
算法,只要对
向量
进行排序即可。然后,您可以使用将输出推送到另一个
向量中:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main() {
    std::vector<int> v1 {1, 2, 3, 4};
    std::vector<int> v2 {1, 3};
    std::vector<int> out;
    std::set_difference(std::begin(v1), std::end(v1), // the first vector...
                        std::begin(v2), std::end(v2), // ...minus the second...
                        std::back_inserter(out));     // ...is stored into here
    for(auto i : out) std::cout << i << ' ';
}

(注意,这个版本假设它可以使用
比较元素,听起来像,不?你已经提到了,那么为什么你不认为你可以使用它呢?它只要求你的
向量
s被排序,而你的是。哦,我想我明白了:你认为你只能在
std::set
上使用
算法吗?不正确。t标准库中的容器和算法不直接交互,而是通过迭代器进行交互,因此算法不需要关心它们所操作的容器的确切类型。如果希望结果也进入
向量中,请使用创建算法的输出迭代器。但不能使用set算法s在一个
std::无序集上,这有时似乎会让人困惑。
2 4