您的位置:首页 > 其它

定义元素类型为int、元素个数不受限制的集合类Set, 包括:<=(包含于)、==(相等)、!=(不等)、 |(并集)、 &(交集)、-(差集)、+=(增加元素)、-=(删除元素)等操作

2012-12-19 22:53 956 查看
什么都不多说了,直接上代码= =、

感谢汪二的帮忙,不然一直都有问题>.<考试的时候能把汪二随身携带就好啦


但是呢,还是要自力更生啦


#include <iostream>
using namespace std;
struct IntSet{
int *inset;
};
class Set{
private:
int size;
int *elements;
public:
Set(){size = 0;elements = NULL;}
void show();
bool operator <=(Set &s);
bool operator ==(Set &s);
bool operator !=(Set &s);
Set & operator |(Set &s);
Set & operator &(Set &s);
Set & operator -(Set &s);
void operator +=(int x);
void operator -=(int x);
~Set(){if (elements!=NULL){
delete []elements;
}
}

};

void Set::show(){
for (int i = 0;i<size;i++)
{
cout<<elements[i]<<" ";
}
cout<<endl;
}
bool Set::operator<=(Set &s){
int count = 0;
for (int i = 0;i<size;i++)
{
for (int z = 0;z<s.size;z++)
{
if (elements[i]==s.elements[z])
{
count++;
}
}
}
if (count==size)
{
return true;
}else
return false;
}

bool Set::operator==(Set &s){
int count = 0;
for (int i = 0;i<size;i++)
{
for (int z = 0;z<s.size;z++)
{
if (elements[i]==s.elements[z])
{
count++;
}
}
}
if (count==size&&size==s.size)
{
return true;
}else
return false;
}

bool Set::operator !=(Set &s){
int count = 0;
for (int i = 0;i<size;i++)
{
for (int z = 0;z<s.size;z++)
{
if (elements[i]==s.elements[z])
{
count++;
}
}
}
if (count==size&&size==s.size)
{
return false;
}else
return true;
}

Set & Set:: operator | (Set &s){
Set *set = new Set;
set->size = size;
set->elements = new int[set->size];
for (int r= 0;r<size;r++ )
{
set->elements[r] = elements[r];
}
for (int i = 0;i<s.size;i++)
{
int count = 0;
for (int j = 0;j<size;j++)
{
if (s.elements[i]!=elements[j])
{
count++;
}
}
if (count ==size)
{
int *temp = elements;
set->size++;
set->elements = new int[set->size];
for (int i1 = 0;i1<set->size-1;i1++)
{
set->elements[i1]= temp[i1];
}
set->elements[set->size-1]= s.elements[i] ;
}
}
return *set;
}
//交集
Set & Set:: operator & (Set &s){
Set *set = new Set;
set->elements = NULL;
set->size = 0;
for (int i = 0;i<s.size;i++)
{
for (int j = 0;j<size;j++)
{
if (s.elements[i]==elements[j])
{
int *temp = set->elements;
set->size++;
set->elements = new int[set->size];
for (int i1 = 0;i1<set->size-1;i1++)
{
set->elements[i1]=temp[i1];
}
set->elements[set->size-1]=elements[j];
}
}
}
return *set;
}

//差集
Set & Set:: operator - (Set &s){
Set *set = new Set;
set->size = 0;
set->elements = NULL;
for (int i = 0;i<size;i++)
{
int count = 0;
for (int j = 0;j<s.size;j++)
{
if (elements[i]!=s.elements[j])
{
count++;
}
}
if (count==s.size)
{
int *temp = set->elements;
set->size++;
set->elements = new int[set->size];
for (int i1 = 0;i1<set->size-1;i1++)
{
set->elements[i1] = temp[i1];
}
set->elements[set->size-1] = elements[i];
}
}
return *set;
}

void Set::operator+=(int x){
int flag = 0;
for (int i =0;i<size;i++)
{
if (x==elements[i])
{
flag = 1;
}
}
if (flag==0)
{
int *temp = elements;
size++;
elements = new int[size];
for (int i = 0;i<size-1;i++)
{
elements[i]= temp[i];
}
elements[size-1]= x;
}else{
cout<<x<<"已经在该集合中存在,添加失败。"<<endl;
}

}

void Set::operator-=(int x){
int flag = 0;
int pos;
for (int i =0;i<size;i++)
{
if (x==elements[i])
{
flag = 1;
pos = i;
}
}
if (flag ==0)
{
cout<<"该集合中不存在"<<x<<"这个元素,删除失败。"<<endl;
}else{
int *temp = elements;
size--;
elements = new int[size];
for (int j = 0;j<pos;j++)
{
elements[j]=temp[j];
}
for (int i= pos;i<size-1;i++)
{
elements[i]=temp[i+1];
}
}
}

void main(){
Set set1 ;
Set set2;
Set set3;
set1+=1;
set1+=2;
set1+=3;
set2+=7;
set2+=2;
set1.show();
set3=set1|set2;
set1.show();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐