set集合的交集和并集,利用迭代器iterator进行遍历和访问,因为该迭代器指向的是set 容器存储的某个元素,而不是键值对,因此通过 *it 可以直接获取该迭代器指向的元素的值。
#include<bits/stdc++.h> //万能开头,包含了c++所有头文件
using namespace std;
int main(){
int n,m;
//set<int>类型是一种排好序的数组,
//存进去的元素可以自动排序,且每个元素仅出现一次
set<int> x,y,x1,y1; //表示这个set集合是int类型
int s;
cin>>n>>m;
for(int i = 0;i<n;i++){
cin>>s;
x.insert(s);
}
for(int j = 0;j<m;j++){
cin>>s;
y.insert(s);
}
//想要遍历或者查询set集合中的元素就需要用到iterator
//该迭代器对象it调用begin时,会返回迭代器it,该it指向容器第一个元素,*it就是调用该元素的内容
set<int>::iterator it;
//交集
for(it = x.begin();it!=x.end();it++){
if(y.find(*it)!=y.end()){ //如果在y集合中通过迭代器去寻找这个元素找不到就返回end,找到就代表有交集
x1.insert(*it);
}
}
//并集
for(it = x.begin();it!=x.end();it++){
y1.insert(*it);
}
for(it = y.begin();it!=y.end();it++){
y1.insert(*it);
}
//输出
cout<<x1.size();
if(x1.size()!=0){
for(it = x1.begin();it!=x1.end();it++){
cout<<" "<<*it;
}
}
cout<<endl;
cout<<y1.size();
if(y1.size()!=0){
for(it = y1.begin();it!=y1.end();it++){
cout<<" "<<*it;
}
}
return 0;
}