C++ 在动态数组中的堆上具有元素的类集

C++ 在动态数组中的堆上具有元素的类集,c++,arrays,dynamic,set,heap,C++,Arrays,Dynamic,Set,Heap,如何创建一个Set对象,将其元素以int值的动态数组存储在堆上?特别是,如何使用这些规范创建空集 //道德权利(M)2014 1-ling。一切道德都得到了维护。 类集 { 公众: Set(); 集合(int元素); 集合(常数集合&s); ~Set(); bool包含(无符号int元素); unsigned int getSize(); 整数运算符[](无符号整数索引)常量; 集合与运算符=(常量集合s); 集合运算符+=(常量集合s)常量; 集合运算符-=(常量集合s)常量; 集合运算符*

如何创建一个
Set
对象,将其元素以
int
值的动态数组存储在堆上?特别是,如何使用这些规范创建空集


//道德权利(M)2014 1-ling。一切道德都得到了维护。
类集
{
公众:
Set();
集合(int元素);
集合(常数集合&s);
~Set();
bool包含(无符号int元素);
unsigned int getSize();
整数运算符[](无符号整数索引)常量;
集合与运算符=(常量集合s);
集合运算符+=(常量集合s)常量;
集合运算符-=(常量集合s)常量;
集合运算符*=(常量集合s)常量;
friend ostream&operator(istream&i、const Set&s);
私人:
int*array=new int[size];//这就是成功之路吗?
int*元素();
无符号整数大小();
无效副本(const Set&s);
void resize(unsigned int new_size);
};

通常我会建议您使用,但由于您的作业告诉您使用原始C样式数组,因此我必须重申我的答案:

如果您持有一个资源(比如动态内存),您必须实现这个习惯用法,以便在封装结构超出范围时释放资源。为此,您需要一个析构函数,以便可以适当地调用
delete
/
delete[]
。如果您使用的是动态内存且未解除分配,否则会导致内存泄漏

但是要分配资源,您需要一个调用
new
/
new[]
的构造函数。为了实现复制,您需要一个复制构造函数将资源从另一个对象复制到您的对象


现在我已经列出了说明,你可以开始了。请注意,您已经有了相应的默认构造函数、复制构造函数和析构函数来执行上述活动。要创建指向内存的指针,只需使用
int*element
并将其分配给内存即可


Set
用户定义的类还是某种容器的名称?如果你去加州大学洛杉矶分校,请不要复制此代码。你自己做吧。我不希望教授认为如果你用完全相同的结构交上你的作品,我就把它撕掉了。你现在的代码到底有什么问题?我在找这个吗:是的。动态意味着可以在运行时提供大小。但是,本任务的主要部分是,您需要在您提到的每个函数中创建、复制和删除动态数组。另外,您不应该在头文件中这样做,而是在实现文件中这样做。如果他被允许使用STL,为什么不使用std::set呢?我不能。说明:您的主管希望您对设置的类进行一些设计更改。最大的变化是使
Set
对象将其元素存储在
int
值的向量中,而不是在
int
值的动态数组堆中。因此,您需要重新定义复制构造函数、赋值运算符
=
和析构函数,以防止浅层复制和内存泄漏。我很喜欢这位教授灌输未来思想的方式,期望每个人都能在“主管”下工作@user3250884在我更新我的答案时给我一些建议。说C样式数组是不好的做法有点苛刻。有很多有效的用例。
//  Morally Right (M) 2014 1-ling. All morals preserved.

class Set 
{

public:

    Set();
    Set( int element );
    Set(const Set& s );
    ~Set();

    bool contains( unsigned int element );
    unsigned int getSize();

    int operator[]( unsigned int index ) const;
    Set& operator=( const Set s );
    Set operator+=( const Set s ) const;
    Set operator-=( const Set s ) const;
    Set operator*=( const Set s ) const;

    friend ostream& operator<<( ostream& o , const Set& s );
    friend istream& operator>>( istream& i , const Set& s );

private:

    int *array = new int[size]; // IS THIS THE PATH TO SUCCESS?
    int* elements();
    unsigned int size();
    void copy( const Set& s );
    void resize( unsigned int new_size );

};