我的任务是创建一个二维动态数组的类,我被困在一个需要创建成员函数的部分,我可以调用它来将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 :(得分: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;
};