1

基本上我想使用传递给我的班级的大小变量创建一个多维数组,但不知道该怎么做。

我试过做

//Class header
Tile * gameTile;

//Class cpp
gameTile = new Tile[size][size];

它不介意new Tile[size]但不是[size][size]。为什么是这样?

4

4 回答 4

4

这失败了,因为只有分配数组的第一个维度可能具有动态大小。为了克服这个限制,您可以使用二维向量:

std::vector<std::vector<Tile> > gameTile(size, std::vector<Tile>(size));
于 2013-06-02T00:45:20.430 回答
1

就像在 Vlad 提到的链接中一样,您可以使用向量,或者为了更快的速度,您可以使用以下代码来初始化双向数组:

int i;
int ** intTile;
intTile = new  int*[5];

for (i = 0; i < 5; i++) {
    intTile[i] = new int[5];
}
于 2013-06-02T00:42:06.207 回答
0

尽管您想使用二维数组,但为了完整性,我只想指出您也可以使用一维数组来实现您的目的。如果它的尺寸按尺寸排列,则您有:

gameTile = new Tile[size*size];
//now gameTile[y][x] becomes:
Tile t = gameTile[x + y*size];

//if array is not square
gameTile = new Tile[width*height];
//now gameTile[y][x] becomes:
Tile t = gameTile[x + y*width];
于 2013-06-02T01:50:13.600 回答
0

你可以做

Tile *gameTile = &((new Tile[size][size])[0][0]);

这会将多维数组中第一个元素的地址存储到gameTile。

于 2013-06-02T00:48:08.500 回答