如何创建一个函数来更改2D动态数组中的值

时间:2014-11-19 04:59:47

标签: c++ arrays 2d dimensional

我的任务是创建一个二维动态数组的类,我被困在一个需要创建成员函数的部分,我可以调用它来将2D数组中的特定位置更改为值我的选择。

class TwoD
{
public:
    void setRowCol(int numRow, int numCol, double value);
    TwoD();
    TwoD(int row, int col);
    void fillArray();
    void outputArray();



private:
    double** dArray = new double* [MaxRow];
    int MaxRow;
    int MaxCol;


};



TwoD::TwoD()
{
    MaxCol = 3;
    MaxRow = 3;

    for (int i = 0; i < 3; i++)
    {

        dArray[i] = new double[3];

    }

}

void TwoD::setRowCol(int numRow, int numCol, double value)
{
    dArray[numRow][numCol] = value;

}

所以我遇到麻烦的部分是函数setRowCol的最后一部分。我认为问题在于它没有传递数组的“深层”副本,而是原始数组本身。

2 个答案:

答案 0 :(得分:0)

将MaxRow设为静态变量&amp;在使用它创建dArray之前将其初始化为适当的值(3)。

答案 1 :(得分:0)

如果没有std::vector,并且使用double**,您可能会遇到以下情况:

class TwoD
{
public:
    TwoD(int row, int col) : maxRow(row), maxCol(col) {
        dArray = new double* [maxRow];
        for (int i = 0; i != maxRow; ++i) {
            dArray[i] = new double[maxCol] {};
        }
    }

    ~TwoD() {
        Delete();
    }

    TwoD(const TwoD& rhs) : maxRow(rhs.maxRow), maxCol(rhs.maxCol) {
        dArray = new double* [maxRow];
        for (int i = 0; i != maxRow; ++i) {
            dArray[i] = new double[maxCol];
            for (int j = 0; j != maxCol; ++j) {
                dArray[i][j] = rhs.dArray[i][j];
            }
        }
    }

    TwoD& operator = (const TwoD& rhs) {
        if (&rhs == this) {
            return *this;
        }
        Delete();
        maxRow = rhs.maxRow;
        maxCol = rhs.maxCol;
        dArray = new double* [maxRow];
        for (int i = 0; i != maxRow; ++i) {
            dArray[i] = new double[maxCol];
            for (int j = 0; j != maxCol; ++j) {
                dArray[i][j] = rhs.dArray[i][j];
            }
        }
    }

    void setRowCol(int numRow, int numCol, double value) {
        dArray[numRow][numCol] = value;
    }

private:
    void Delete() {
        for (int i = 0; i != maxRow; ++i) {
            delete [] dArray[i];
        }
        delete [] dArray;
    }

private:
    double** dArray;
    int maxRow;
    int maxCol;
};