这个使用到常用的集合算法
首先进行普及用法:
set_intersection //求两个容器的交集
set_union //求两个容器的并集
set_difference //求两个容器的差集
显然,我们想要两个序列的公共元素,不放将他们保存到容器里面
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
int main()
{
int A[5] = { 11,34,5,7,9 };
int B[5] = { 2,7,1,5,3 };
vector<int> a(A, A + 5);
vector<int> b(B, B + 5);
vector<int> together;
set_intersection(a.begin(), a.end(), b.begin(), b.end(), together.begin());
for (vector<int>::iterator it = together.begin(); it != together.end(); it++)
{
cout << *it << endl;//*取内容6
}
return 0;
}
异常,执行不了,显示触发了一个断点
发现是set_intersection的最后一个参数出现了问题!
多次改动后仍然没有多大改观,然后在网上查到:
求交集的集合必须是有序序列,所以我们最好将vector元素转化为set元素
接着我们将vector转换成了set,然后用set做的函数set_intersection的参数。
#include <algorithm>
#include <iterator>
#include <vector>
#include <set>
#include <iostream>
using namespace std;
void intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
set<int> a(nums1.begin(), nums1.end());
set<int> b(nums2.begin(), nums2.end());
std::set_intersection(a.begin(), a.end(), b.begin(), b.end(), insert_iterator<vector<int>>(res, res.begin()));
for (vector<int>::iterator it = res.begin(); it != res.end(); it++)
{
cout << *it << endl;//*取内容
}
}
int main()
{
int A[5] = { 11,34,5,7,9 };
int B[5] = { 2,7,1,5,3 };
vector<int> a(A, A + 5);
vector<int> b(B, B + 5);
intersection(a, b);
return 0;
}