Как создать функцию для изменения значения в двумерном динамическом массиве

Мне было поручено создать класс для двумерного динамического массива, и я застрял в той части, где мне нужно создать функцию-член, которую я могу вызвать, чтобы изменить определенную позицию в 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. Я думаю, что проблема в том, что он передает не «глубокую» копию массива, а сам исходный массив.

0

Решение

Сделать MaxRow статической переменной & инициализируйте его соответствующим значением (3), прежде чем использовать его для создания dArray.

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;
};
0

По вопросам рекламы [email protected]