您的位置:首页 > 其它

集合的运算(重载操作符)

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: