weixin_37455420
weixin_37455420
采纳率100%
2017-03-30 10:08 阅读 924

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

9

#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 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;
    }
    
    点赞 1 评论 复制链接分享
  • shen_wei shen_wei 2017-03-30 10:47
     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;
    }
    
    点赞 1 评论 复制链接分享
  • shen_wei shen_wei 2017-03-30 10:48

    代码不规范。。太难看了。。。记得书写规范代码。。。现在硬盘不缺少容量。。。。

    点赞 1 评论 复制链接分享

相关推荐