weixin_37455420 2017-03-30 10:08 采纳率: 100%
浏览 929
已采纳

这段代码有两三个错误 代码是基础的c++ 运行环境为CB或者devc++麻烦帮我改一下~

#include
#include
#include
using namespace std;
class Set
{
int maxsize;//集合的当前最大容量
int count;//集合的当前元素个数
int *elem; public: //Set(int initsize=10);//构造函数,创建一个空集,initsize: 集合的初始容量
Set(const Set &s);//拷贝构造函数
Set();//析构函数
int Add(int a[], int len);//增加一组新元素,返回值为新增加的元素个数
int Add(int e);//增加一个新元素,返回值为新增加的元素个数
bool Contains(int e) const;//检查当前集合中是否已包含元素 e
Set Intersect(const Set& s) const;//求与另一集合的交集
Set Union(const Set& s) const;//求与另一集合的并集
int GetCount() const;//获取当前集合中的元素个数
void Print() const;};//打印所有元素 };//注:const 表示该函数不会对当前对象的数据成员做出修改
int main()
{
int a[]={1,3,5,7,9}, b[]={2,4,6,8,10,3, 5};
Set s1, s2;
s1.Add(a, 5);
s2.Add(b, 7);
Set s3 = s1.Intersect(s2);
Set s4 = s1.Union(s2);
s3.Print();
s4.Print(); }
void Set::Print()const
{
for (int i = 0; i < count; i++)
cout << elem[i] << " ";
cout << endl; }
Set Set::Union(const Set& s) const
{ Set r(s); //用 s 来初始化新集合
r.Add(elem, count); //再添加入当前集合中包含的内容
return r; }
inline int Set::GetCount() const
{ return count; }
Set Set::Intersect(const Set& s) const
{
//int Set::count;
Set r(s.count + this->count);
for (int i = 0; i < s.count; i++)
{
if (Contains(s.elem[i])) r.Add(s.elem[i]); //两个集合中都有的元素,加入到交集中。
}
return r; }
Set::Set(const Set& s) { maxsize = s.maxsize;
count = s.count;
elem = new int[maxsize]; //为新元素分配空间
memcpy(elem, s.elem, sizeof(int)*count); //复制所有元素
}
Set::Set() { delete[] elem; //释放占用空间
}
Set::Set(int initsize) :maxsize(initsize), count(0)
{ elem = new int [maxsize];
if (!elem) throw "申请集合空间失败!"; }
int Set::Add(int a[], int len)
{ int c = 0; //用于记录新增加的元素个数
for (int i = 0; i < len; i++)
c+= Add(a[i]);
return c; }
int Set::Add(int e)
{ if (Contains(e)) return 0; //当前集合中已包含了指定元素,不用添加了。
if (count == maxsize) //空间已满,再增加空间
{ int *tmp = new int[maxsize+10];
if (!tmp)
return 0; //申请新空间失败,退出
memcpy(tmp, elem, count*sizeof(int)); //将原来的内容复制到新空间中
maxsize += 10; //最大容量增长10个数据单位
delete[] elem; //删除原有空间
elem = tmp;
} elem[count++] = e; //将新元素存放在数组的最后
return 1; }
bool Set::Contains(int e) const
{ for (int i = 0; i < count; i++)
if (elem[i] == e) return true;
return false;}

  • 写回答

3条回答 默认 最新

  • shen_wei 2017-03-30 10:20
    关注
     class Set
    {
        int maxsize;//集合的当前最大容量
        int count;//集合的当前元素个数
        int *elem; public: //Set(int initsize=10);//构造函数,创建一个空集,initsize: 集合的初始容量
        Set(const Set &s);//拷贝构造函数
        Set();//析构函数
        Set(int initsize);
        int Add(int a[], int len);//增加一组新元素,返回值为新增加的元素个数
        int Add(int e);//增加一个新元素,返回值为新增加的元素个数
        bool Contains(int e) const;//检查当前集合中是否已包含元素 e
        Set Intersect(const Set& s) const;//求与另一集合的交集
        Set Union(const Set& s) const;//求与另一集合的并集
        int GetCount() const;//获取当前集合中的元素个数
        void Print() const;
    };//打印所有元素 };//注:const 表示该函数不会对当前对象的数据成员做出修改
    
    int main()
    {
        int a[]={1,3,5,7,9}, b[]={2,4,6,8,10,3, 5};
        Set s1, s2;
        s1.Add(a, 5);
        s2.Add(b, 7);
        Set s3 = s1.Intersect(s2);
        Set s4 = s1.Union(s2);
        s3.Print();
        s4.Print(); 
    }
    
    void Set::Print()const
    {
        for (int i = 0; i < count; i++)
            cout << elem[i] << " ";
        cout << endl; 
    }
    
    Set Set::Union(const Set& s) const
    { 
        Set r(s); //用 s 来初始化新集合
        r.Add(elem, count); //再添加入当前集合中包含的内容
        return r; 
    }
    
    inline int Set::GetCount() const
    {
        return count; 
    }
    
    Set Set::Intersect(const Set& s) const
    {
        //int Set::count;
        Set r;
        r.count = s.count + this->count;
        for (int i = 0; i < s.count; i++)
        {
            if (Contains(s.elem[i])) 
                r.Add(s.elem[i]); //两个集合中都有的元素,加入到交集中。
        }
        return r; 
    }
    
    Set::Set(const Set& s) 
    { 
        maxsize = s.maxsize;
        count = s.count;
        elem = new int[maxsize]; //为新元素分配空间
        memcpy(elem, s.elem, sizeof(int)*count); //复制所有元素
    }
    
    Set::Set() 
    { 
        delete[] elem; //释放占用空间
    }
    
    Set::Set(int initsize) :maxsize(initsize), count(0)
    { 
        elem = new int [maxsize];
        if (!elem) throw "申请集合空间失败!"; }
        int Set::Add(int a[], int len)
        { int c = 0; //用于记录新增加的元素个数
        for (int i = 0; i < len; i++)
            c+= Add(a[i]);
        return c; 
    }
    
    int Set::Add(int e)
    { 
        if (Contains(e)) 
            return 0; //当前集合中已包含了指定元素,不用添加了。
        if (count == maxsize) //空间已满,再增加空间
        { 
            int *tmp = new int[maxsize+10];
            if (!tmp)
                return 0; //申请新空间失败,退出
            memcpy(tmp, elem, count*sizeof(int)); //将原来的内容复制到新空间中
            maxsize += 10; //最大容量增长10个数据单位
            delete[] elem; //删除原有空间
            elem = tmp;
        } 
        elem[count++] = e; //将新元素存放在数组的最后
        return 1; 
    }
    bool Set::Contains(int e) const
    { 
        for (int i = 0; i < count; i++)
            if (elem[i] == e) 
                return true;
        return false;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程