集合的运算(重载操作符)
2010-07-29 18:08
218 查看
#include <iostream> #include <ctime> using namespace std; #define SETSIZE 10 struct Set { int num[SETSIZE+1]; }; //初始化集合 void Init_Set(Set &S) { for(int i=1;i<=SETSIZE;i++) S.num[i]=0; //num[0]未用 } //给集合赋值 void Init_Set(Set &S,int a[],int n) { for(int i=1;i<n;i++) S.num[a[i]]=1; //a[0]使用 cout<<endl; } //插入数据 //void Insert_Set(Set &S,int n) //{ // S.num =1; //} //删除集合的数 //void Delet_Set(Set &S,int n) //{ // S.num =0; //} //打印集合 ostream & operator << (ostream &ostr,Set &S ) //重载<< { ostr<<"{"; for(int i=1;i<=SETSIZE;i++) if(S.num[i]==1) ostr<<i<<","; ostr<<"}"; return ostr; } //求并集 Set operator + (Set &S1,Set &S2) //重载+,求并集 { Set T; Init_Set(T); for(int i=1;i<=SETSIZE;i++) if(S1.num[i]==1 || S2.num[i]==1) T.num[i]=1; return T; } //求交集 Set operator * (Set &S1,Set &S2) //重载*,求并集 { Set T; Init_Set(T); for(int i=1;i<=SETSIZE;i++) if(S1.num[i]==1 && S2.num[i]==1) T.num[i]=1; return T; } //重载^,属于∈ int operator ^ (int n,Set &S) { if(S.num ==1) return 1; else return 0; } int main() { srand((unsigned)time(0)); Set A; Init_Set(A); //初始化集合 cout<<"请输入集合A的元素个数:"<<endl; int n; cin>>n; int a[SETSIZE]; for(int i=1;i<n;i++) a[i]=rand()%(10-1)+1; for(i=1;i<n;i++) cout<<a[i]<<" "; Init_Set(A,a,n); //用数组a[]给集合赋值 cout<<A<<endl; //打印 //往集合中插入 /* int x; cout<<"请输入要插的数:"<<endl; cin>>x; while(x!=0) //以0结束 { Insert_Set(A,x); cout<<A<<endl; cin>>x; } */ //删除集合中的数 /* int y; cout<<"请输入要删除的数:"<<endl; cin>>y; while(y!=0) //以0结束 { Delet_Set(A,y); cout<<A<<endl; cin>>y; } */ Set B; Init_Set(B); //初始化集合 int m; cout<<"请输入集合B的元素个数:"<<endl; cin>>m; int b[SETSIZE]; for(i=1;i<n;i++) b[i]=rand()%(10-1)+1; for(i=1;i<n;i++) cout<<b[i]<<" "; Init_Set(B,b,n); //用数组B[]给集合赋值 cout<<B<<endl; //求并集 cout<<"并集:"<<endl; cout<<A+B<<endl; //求交集 cout<<"交集:"<<endl; cout<<A*B<<endl; //判断是否属于集合 int t; cout<<"请输入要判断的数:"<<endl; cin>>t; while(t!=0) { if(t^A) cout<<"属于!"<<endl; else cout<<"不属于!"<<endl; cin>>t; } return 0; }
相关文章推荐
- 《离散数学及其应用》 【第2章】—2.2 集合运算
- 集合的运算
- 算法训练 集合运算
- C++STL_set中函数_集合运算
- SQL语句(十六)实现集合运算、对数据修改、数据表复制
- 集合的概念和运算
- 使用Stack堆栈集合大数据运算
- 集合及运算(并查集)
- 实现两个集合的相等判定、并、交和差运算
- Oracle基础知识(十九) - 集合运算
- oracle 四种集合运算
- 集合扩展方法、委托的运算、事件
- matlab 中2个集合相交的运算
- 集合运算
- sql语言之集合的运算和比较
- R语言︱集合运算——小而美法则
- Oracle数据库之集合运算
- oracle集合运算
- Shell集合运算
- 已序集合求交运算和求差运算