描述
给定两个集合A和B的所有元素,计算它们的交、并、差集。
输入
输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整数构成集合A,第二行的所有整数构成集合B,分别用空格分隔。A和B最多分别不超过100个元素。
输出
输出A、B的交、并、差集中的所有元素(以递增顺序)。每个集合占一行,数据元素之间用空格分隔。
样例输入
1 0 1 2 3 4 5 6 7 8 8 3 6 8 9样例输出
3 6 8 0 1 2 3 4 5 6 7 8 9 0 1 2 4 5 7 用STL做的,上网查了一些资料。 #include<iostream> #include<cstring> #include<sstream> #include<cstdio> #include <algorithm> #include<set> using namespace std; int main() { set<int>a; set<int>b; set<int>c; int n,x,l,aa; string str1,str2; scanf("%d",&n); getchar(); while(n--) { int i=0,j=0,x=0,f=1,t; getline(cin,str1); std::stringstream ss(str1); while (ss>>aa) { a.insert(aa); } getline(cin,str2); std::stringstream ss1(str2); while (ss1>>aa) { b.insert(aa); } set<int>::iterator ii; set_intersection(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin())); l=c.size(); i=0; for(ii=c.begin(); ii!=c.end(); ii++) { i++; if(i<l) printf("%d ",(*ii)); else printf("%d\n",*ii); } c.clear(); set_union(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin())); l=c.size(); i=0; for(ii=c.begin(); ii!=c.end(); ii++) { i++; if(i<l) printf("%d ",(*ii)); else printf("%d\n",(*ii)); } c.clear(); set_difference(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin())); l=c.size(); i=0; for(ii=c.begin(); ii!=c.end(); ii++) { i++; if(i<l) printf("%d ",(*ii)); else printf("%d\n",(*ii)); } c.clear(); } return 0; }