谁能帮我修改一下这个C++小程序
以下是个集合类,但是集合元素只能是数值,但是不知可否将其元素改成数组(double[a,b])或者结构体(struct{double a,b;})?该如何实现呢? #include<algorithm>
#include<iostream>
using namespace std;
class SET //集合里的元素按从小到大的顺序排列
{
public:
SET();//缺省构造函数
SET(const SET &); //拷贝函数
int find(int val)const; //找到值为val元素返回1,否则返回0
int full(void)const; //集合满时返回1,否则返回0
int empty(void)const; //集合空时返回1,否则返回0
void create(void);//创建集合
void display(void) const;//输出集合
int getlen() const;//获取集合中元素个数
void increase() ;//扩大元素中的最大个数
SET operator +(const SET &)const; //集合的并集
SET operator -(const SET &)const; //集合的差集
SET operator *(const SET &)const; //集合的交集
SET &operator <<(int value); //增加一个元素
SET &operator >>(int value); //删除一个元素
SET &operator =(const SET &); //对集合赋值
int *data; //存放集合元素的动态内存
int count; //目前元素个数
int maxlen;//元素最大个数
~SET(void);
};
SET::SET()
{
data=NULL;
count=0;
maxlen=0;
}
SET::SET(const SET& s1)
{
maxlen=s1.getlen ()+10;
data=new int [maxlen];
int i(0);
for(;i<s1.count ;++i)
{
data[i]=s1.data [i];
}
count=s1.count ;
sort(data,data+count);
}
SET::~SET()
{
delete []data;
count=0;
maxlen=0;
}
int SET::find(int val)const
{
for(int i=0;i!=count;++i)
if(val==data[i])
return 1;
return 0;
}
int SET::full()const
{
return (maxlen==count);
}
int SET::empty ()const
{
return (0==count);
}
void SET::create()
{
cout<<"please enter the number of the set."<<endl;
cin>>count;
maxlen=count+20;
data=new int [maxlen];
cout<<"please enter the value of the set"<<endl;
for(int i=0;i!=count;++i)
cin>>data[i];
}
void SET::display() const
{
for(int i=0;i<count;++i)
cout<<data[i]<<" ";
cout<<endl;
}
void SET::increase ()
{
int *temp= new int[count];
int i;
for(i=0;i<count;++i)
temp[i]=data[i];
delete [] data;
maxlen+=10;
data=new int [maxlen];
for(i=0;i<count;++i)
data[i]=temp[i];
delete [] temp;
}
SET &SET::operator <<(int value)
{
if(maxlen==count)
increase();
data[count]=value;
++count;
sort(data,data+count);
return *this;
}
SET &SET::operator >>(int value)
{
if(!empty())
{
int loc(0);
for(;loc!=count;++loc)
if(data[loc]==value)
{
for(;loc!=count-1;++loc)
data[loc]=data[loc+1];
}
}
--count;
sort(data,data+count);
return *this;
}
int SET::getlen () const
{
return count;
}
SET SET::operator +(const SET &s1)const
{
SET s2(*this);
for(int i(0);i!=s1.count ;++i)
if(!find(s1.data [i]))
s2<<s1.data[i];
sort(data,data+count);
return s2;
}
SET SET::operator -(const SET &s1)const
{
SET temp;
for(int i=0;i<count-1;++i)
if(!s1.find(data[i]))
temp<<data[i];
sort(data,data+count);
return temp;
}
SET SET::operator *(const SET &s1)const
{
SET s2;
for(int i=0;i<count;++i)
if(find(s1.data [i]))
s2<<s1.data[i];
sort(data,data+count);
return s2;
}
SET &SET::operator =(const SET &s1)
{
delete []data;
data=new int [100];
int i(0);
for(;i<s1.count ;++i)
{
data[i]=s1.data [i];
}
count=s1.count ;
sort(data,data+count);
return *this;
}
main()
{
SET a,b,c,d;
a<<12;
a<<13;
b<<12<<14<<11<<1;
a.display();
b.display();
c=a+b;
d=a*b;
c.display();
d.display();
}