#include<iostream>
using namespace std;
const int maxNum=20;
class Set
{
private:
int size; //集合中允许容纳的元素的最大个数
int *elems; //储存元素的数组
int num; //集合中元素的个数
public:
Set(int sz=maxNum);
~Set();
bool IsMenber(int ); //判断是否为集合的元素
bool AddElement(int ); //添加元素
void RemoveElement(int ); //删除元素
void Copy(Set &); //集合复制
void Show(); //显示集合的元素
void Intersect(Set &,Set&); //求集合的交集
void Union(Set &,Set &); //求集合的并集
};
inline Set::Set(int sz)
{
num=0;
size=sz;
elems=new int [size];
}
inline Set::~Set()
{
num=0;
size=0;
delete []elems;
}
bool Set::IsMenber(int e)
{
for(int i=0;i<num;i++)
if(elems[i]==e) return true;
return false;
}
bool Set::AddElement(int elem)
{
if(IsMenber(elem)) return true;
if(num<size)
{
elems[num++]=elem;
return true;
}
return false ;
}
void Set::RemoveElement(int c)
{
int index=-1;
for(int i=0;i<num;i++)
if(elems[i]==c)
{
index=i;
break;
}
if(index!=-1)
{
for(int i=index;i<num-1;i++)
elems[i]=elems[i+1];
num--;
}
}
void Set::Copy(Set &s)
{
if(size<s.size)
{
delete []elems;
elems=new int[s.size];
size=s.size;
}
for(int i=0;i<s.num;i++) elems[i]=s.elems[i];
num=s.num;
}
void Set::Show()
{
cout<<"{";
for(int i=0;i<num-1;i++) cout<<elems[i]<<",";
if(num>0) cout<<elems[num-1];
cout<<"}"<<endl;
}
void Set::Intersect(Set &s1,Set &s2)
{
if(size<s1.size)
{
delete []elems;
elems=new int[s1.size];
size=s1.size;
}
num=0;
for(int i=0;i<s1.num;i++)
if(s2.IsMenber(s1.elems[i])) elems[num++]=s1.elems[i];
}
void Set::Union(Set &s1,Set &s2)
{
if(size<s1.size)
{
delete []elems;
elems=new int [s1.size];
size=s1.size;
}
for(int i=0;i<num;i++)
{
if(s1.IsMenber(elems[i])) s1.RemoveElement(elems[i]);
}
//s1.Show();
for(int i=0;i<s1.num;i++) s2.AddElement(s1.elems[i]);
//s2.Show();
//cout<<s2.num<<endl;
if(num<s2.num)
{
delete []elems;
elems=new int[s2.num];
num=s2.num;
}
for(int i=0;i<s2.num;i++) elems[i]=s2.elems[i];
}
int main()
{
Set s1,s2,s3;
int i;
for(i=0;i<5;i++) s1.AddElement(2*i);
for(i=0;i<5;i++) s2.AddElement(3*i);
cout<<"s1=";s1.Show();
cout<<"s2=";s2.Show();
s2.RemoveElement(9);
cout<<"s2-{9}="; s2.Show();
if(s1.IsMenber(2)) cout<<"2 is in s1\n";
else cout<<"2 is not in s1\n";
s3.Intersect(s1,s2);
cout<<"s1 intsec s2="; s3.Show();
s3.Union(s1,s2);
cout<<"s1 unoin s2=";s3.Show();
return 0;
}
cpp数组,指针与字符串 实现整数类集合,集合中元素可变。集合类元素个数在对象构造函数时给定,由构造函数为元素分配空间
最新推荐文章于 2022-08-31 15:49:21 发布