使用构造函数初始化数组(C ++)

时间:2013-11-03 22:52:26

标签: c++ arrays

如何通过构造函数初始化数组? 以下是名为Sort的类的代码:

private:
    double unpartitionedList[]; 

public:
    Sort(double unpartitionedList[]);

Sort::Sort(double unpartitionedList[])
{
    this->unpartitionedList = unpartitionedList;
}

我希望能够将数组传递给构造函数并将其存储在unpartitionedList[]中。像这样:Sort(array[])

由于代码现在,我在DevC ++中遇到编译器错误:

  

“[错误]将'double *'赋值给'double [0]'”时出现不兼容的类型

我尝试在我认为需要的位置插入引用(&)和解除引用(*)运算符,但不幸的是,我的尝试都没有成功。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:4)

阵列不可分配。您必须执行元素复制或编写实际的C ++代码并使用std::arraystd::vector

答案 1 :(得分:2)

class Sort
{
private:
    double unpartitionedList[]; 

public:
    Sort(double unpartitionedList[]);
};

Sort::Sort(double unpartitionedList[])
{
    this->unpartitionedList = unpartitionedList;
}

该代码无法编译,因为数组可分配。您可以通过几种不同的方式实现目标(取决于您未提及的要求)。

方法1:手动内存管理

class Sort
{
private:
    double* unpartitionedList;
    std::size_t _size; 

public:
    Sort(double* upl, std::size_t n);
};

Sort::Sort(double* upl, std::size_t n) : unpartitionedList(upl), _size(n)
{

}

这里有一些注意事项:如果你打算让这个类获取内存的所有权,你必须正确地管理它(例如释放析构函数中的内存,并提供一个适当的拷贝构造函数,执行深层复制)。由于内存管理要求,如果不是绝对必要,建议不要使用此方法。

方法2/3:STD容器

class Sort
{
private:
    std::vector<double> _upl;
    // or 
    // std::array<double, SIZE> upl; // with a constant SIZE defined

public:
    Sort(const std::vector<double>& upl);
};

Sort::Sort(const std::vector<double>& upl) : _upl(upl)
// Sort::Sort(const std::array<double, SIZE>& upl) : _upl(upl)
{

}

这将删除内存管理要求。 std::vector将允许您在运行时调整数组大小。 std::array是一个围绕C风格数组的瘦包装器(必须在编译时调整大小)。