如何在 C++ 中为二维对象数组分配内存?
How to allocate memory to a 2D array of objects in c++?
三个 类 Zoo、ZooObject 和 Animal present.Is 像下面提到的那样声明 ZooObject 的二维数组有效吗?如果是这样,我该如何初始化它?我很熟悉动态分配一个二维数组,但搞不懂这个。
class ZooObject;
class Zoo {
public:
int rows, cols;
ZooObject ***zooArray;
Zoo(int rows, int cols) {
this->rows = rows;
this->cols = cols;
// dynamically initialize ***zooArray as a 2D array with each
//element of type Animal
// initially initialized to NULL.
// initialize each row first.
for (i = 0; i < rows; i++) {
zooArray[i] = new ZooObject *[cols];
}
// initialize each column.
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
Animal animal;
zooArray[i][j] = &animal;
}
}
}
};
class ZooObject {
public:
bool isAlive;
};
class Animal : public ZooObject {
public:
bool isHerbivore;
};
int main() { Zoo *zoo = new Zoo(3, 3); }
如前所述,这里很好 post 对问题的一般答案进行了详细解释。
How do I declare a 2d array in C++ using new?
在你的情况下,如果你想将其存储为二维数组。您应该首先分配所有行,其中每一行都是一个 ZooObject**
,这是 ZooObject
的指针数组。
然后,对于每一行,您应该分配 ZooObject*
的数组(列)。你会得到这样的东西:
Zoo(int rows, int cols) {
this->rows = rows;
this->cols = cols;
zooArray = new ZooObject**[rows];
for (int i = 0; i < rows; ++i) {
zooArray[i] = new ZooObject*[cols];
for (int j = 0; j < cols; ++j) {
zooArray[i][j] = nullptr;
}
}
}
但是,考虑使用一维数组,您仍然可以通过二维访问它,通过相应的方法,将 rowId, colId
对转换为一维。
另外,别忘了 delete
你 new
!
三个 类 Zoo、ZooObject 和 Animal present.Is 像下面提到的那样声明 ZooObject 的二维数组有效吗?如果是这样,我该如何初始化它?我很熟悉动态分配一个二维数组,但搞不懂这个。
class ZooObject;
class Zoo {
public:
int rows, cols;
ZooObject ***zooArray;
Zoo(int rows, int cols) {
this->rows = rows;
this->cols = cols;
// dynamically initialize ***zooArray as a 2D array with each
//element of type Animal
// initially initialized to NULL.
// initialize each row first.
for (i = 0; i < rows; i++) {
zooArray[i] = new ZooObject *[cols];
}
// initialize each column.
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
Animal animal;
zooArray[i][j] = &animal;
}
}
}
};
class ZooObject {
public:
bool isAlive;
};
class Animal : public ZooObject {
public:
bool isHerbivore;
};
int main() { Zoo *zoo = new Zoo(3, 3); }
如前所述,这里很好 post 对问题的一般答案进行了详细解释。 How do I declare a 2d array in C++ using new?
在你的情况下,如果你想将其存储为二维数组。您应该首先分配所有行,其中每一行都是一个 ZooObject**
,这是 ZooObject
的指针数组。
然后,对于每一行,您应该分配 ZooObject*
的数组(列)。你会得到这样的东西:
Zoo(int rows, int cols) {
this->rows = rows;
this->cols = cols;
zooArray = new ZooObject**[rows];
for (int i = 0; i < rows; ++i) {
zooArray[i] = new ZooObject*[cols];
for (int j = 0; j < cols; ++j) {
zooArray[i][j] = nullptr;
}
}
}
但是,考虑使用一维数组,您仍然可以通过二维访问它,通过相应的方法,将 rowId, colId
对转换为一维。
另外,别忘了 delete
你 new
!