在C ++中初始化矩阵是否正确?

时间:2013-03-04 14:38:17

标签: c++

我有一个带有数组数组变量的类。

private  double * array[4][4];

我可以这样初始化吗?

void RealMatrix::init(int i, int j) {
    this->array[i][j] = new double;
    *(this->array[i][j]) = 0;
}

3 个答案:

答案 0 :(得分:1)

是的,你可以。但是,如果我在你的鞋子里,我会摆脱double指针(除非你有一些具体的理由以这种方式做事)。

答案 1 :(得分:1)

这将动态分配单个double并将2D数组的元素[i][j]的指针设置为指向double。然后它将值0赋给double。您可以在一行中执行以下操作:

this->array[i][j] = new double(); // value-initialization

或者您可以使用以下内容更明确地将其设置为0

this->array[i][j] = new double(0); // direct-initialization

但是,除非你有充分的理由,否则让你的数组成员包含double而不是double* s可能会更好:

double array[4][4];

除非必须,否则动态分配一些东西毫无意义。我无法想象你有一个如此小的阵列的充分理由。

答案 2 :(得分:0)

我使用vector<double>

class Matrix {
    std::vector<double> values;
    const unsigned int width;
public:
    Matrix(unsigned int width, unsigned int height)
    : values(width * height), width(width) {
    }

    double& value(unsigned int i, unsigned int j) {
        return values[i + (width * j))];
    }
};

用法:

Matrix matrix(10, 20);
matrix.value(3, 4) = 15;