题目
给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
运用set集合
set集合的一些常见操作
set<int> q; //以int型为例 默认按键值升序
set<int,greater<int>> p; //降序排列
int x;
q.insert(x); //将x插入q中
q.erase(x); //删除q中的x元素,返回0或1,0表示set中不存在x
q.clear(); //清空q
q.empty(); //判断q是否为空,若是返回1,否则返回0
q.size(); //返回q中元素的个数
q.find(x); //在q中查找x,返回x的迭代器,若x不存在,则返回指向q尾部的迭代器即 q.end()
q.lower_bound(x); //返回一个迭代器,指向第一个键值不小于x的元素
q.upper_bound(x); //返回一个迭代器,指向第一个键值大于x的元素
q.rend(); //返回第一个元素的的前一个元素迭代器
q.begin(); //返回指向q中第一个元素的迭代器
q.end(); //返回指向q最后一个元素下一个位置的迭代器
q.rbegin(); //返回最后一个元素
题目解答
定义迭代器是一个指针。
count函数返回元素出现次数0或1。
set集合里元素默认不同且升序,如果插入相同的元素也会插入失败。
#include<iostream>
#include<set>
using namespace std;
void output(set<int> s)
{
for(set<int>::iterator i=s.begin();i!=s.end();i++)
{
cout<<*i<<" ";
}
cout<<endl;
}
set<int> s1,s2,s3,s4,s5;
int main()
{
int n,m;
int x;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
s1.insert(x);
s4.insert(x);
s5.insert(x);
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>x;
s2.insert(x);
s4.insert(x);
if(s1.count(x)==1)
s5.erase(x),s3.insert(x);
}
output(s3);
output(s4);
output(s5);
return 0;
}