输入两行数,求这两行数的交集
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<int> mkl1, mkl2;
while (1)
{
int tmp;
cin >> tmp;
if (tmp == -1)
{
break;
}
mkl1.insert(tmp);
}
while (1)
{
int tmp;
cin >> tmp;
if (tmp == -1)
{
break;
}
mkl2.insert(tmp);
}
vector<int> alll(90);
auto a = set_intersection(mkl1.begin(), mkl1.end(), mkl2.begin(), mkl2.end(), alll.begin());
auto b = alll.begin();//调整数组大小
alll.resize(a - alll.begin());
for (int i = 0; i < alll.size(); i++)
{
cout << alll[i] << " ";
}
return 0;
}
set_intersection(mkl1.begin(), mkl1.end(), mkl2.begin(), mkl2.end(), alll.begin());
在set_intersection中有五个参数。
分别是
第一个集合的开始与结束
第二个集合的开始与结束
第五个参数是要储存返回结果的数组
首先应该有两个集合 set,或者说是必须一个排好序数组,像下面这样。
因为set是排好序的,所以不用另外排序
std::vector<int> v1{ 1,2,3,4,5,6,7,8 };
std::vector<int> v2{ 5,7,9,10 };
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
然后用于存储结果的数组必须必须已经分配空间,否则会出现段错误。
vector<int> alll(90);
这里的90代表一个足够大的空间,实际使用的时候应该足够大
最后再调整数组大小
alll.resize(a - alll.begin());
输出结果:
C++集合操作之集合交集:std::set_intersection_u014023993的专栏-CSDN博客_std::set_intersection
【C++】关于 std::set_intersection( ) 函数用法_Sim0Hayha的博客-CSDN博客_set_intersection