http://www.cppleyuan.com/viewthread.php?tid=4457
//输入集合A、B和全集C,求两集合的交集、并集、补集、差集
/*
并集:以属于A或属于B的元素为元素的集合成为A与B的并(集)
交集: 以属于A且属于B的元素为元素的集合成为A与B的交(集)
差:以属于A而不属于B的元素为元素的集合成为A与B的差(集)
补集:A的补集C-B
*/
/*
例如:A={1,2,3} B={2,3,4} C={1,2,3,4,5}
AB并集为={1,2,3,4}
交集为={2,3}
A补集={4,5}
AB差集为={1}
*/
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> A,B,C;
int temp;
cout<<"input A,finished by a character"<<endl;
while(cin>>temp)
A.push_back(temp);
cin.clear() ;//清除错误状态
cin.ignore() ;//跳过无效数据
cout<<"input B,finished by a character"<<endl;
while(cin>>temp)
B.push_back(temp);
cin.clear() ;
cin.ignore() ;
cout<<"input C,finished by a character"<<endl;
while(cin>>temp)
C.push_back(temp);
cin.clear();
cin.ignore();
//求交集
vector<int> AND;
for(int i=0;i<A.size();i++)
for (int j=0;j<B.size();j++)
if(A[i]==B[j])
AND.push_back(B[j]);
cout<<"交集为"<<endl;
//显示交集
for(i=0;i<AND.size();i++)
cout<<AND[i]<<" ";
cout<<endl;
//求并集
AND.clear();
//先把A的元素依次加入
for(i=0;i<A.size();i++)
AND.push_back(A[i]);
//加入B中有且与A的每一个元素都不相等的元素
for(int j=0;j<B.size();j++)
{
int k=0;
for(i=0;i<A.size();i++)
if(B[j]!=A[i])
k++;
if(k>=A.size())
AND.push_back(B[j]);
}
//显示并集
cout<<"并集为"<<endl;
for(i=0;i<AND.size();i++)
cout<<AND[i]<<" ";
cout<<endl;
return 0;
}