Мне было поручено создать класс для двумерного динамического массива, и я застрял в той части, где мне нужно создать функцию-член, которую я могу вызвать, чтобы изменить определенную позицию в 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. Я думаю, что проблема в том, что он передает не «глубокую» копию массива, а сам исходный массив.
Сделать MaxRow статической переменной & инициализируйте его соответствующим значением (3), прежде чем использовать его для создания dArray.
Без 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;
};