Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用指针创建数组_C++ - Fatal编程技术网

C++ 使用指针创建数组

C++ 使用指针创建数组,c++,C++,基本上,我想使用传递给类的size变量创建多维数组,但不确定如何创建 我试过了 //Class header Tile * gameTile; //Class cpp gameTile = new Tile[size][size]; 它不介意新的瓷砖[尺寸],但不介意[尺寸][尺寸]。这是为什么?就像在Vlad提到的链接中一样,您可以使用向量,或者为了更快,您可以使用以下代码初始化双向数组: int i; int ** intTile; intTile = new int*[5]; fo

基本上,我想使用传递给类的size变量创建多维数组,但不确定如何创建

我试过了

//Class header
Tile * gameTile;

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

它不介意新的瓷砖[尺寸],但不介意[尺寸][尺寸]。这是为什么?

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

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

for (i = 0; i < 5; i++) {
    intTile[i] = new int[5];
}

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

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

for (i = 0; i < 5; i++) {
    intTile[i] = new int[5];
}

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

std::vector<std::vector<Tile> > gameTile(size, std::vector<Tile>(size));

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

std::vector<std::vector<Tile> > gameTile(size, std::vector<Tile>(size));
你可以

Tile *gameTile = &((new Tile[size][size])[0][0]);
这将多维数组中第一个元素的地址存储到gameTile。

您可以这样做

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

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

虽然您希望使用二维数组,但为了完整起见,我只想指出,您也可以使用一维数组。如果是按尺寸标注的尺寸,则您有:

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];

虽然您想使用二维数组,但为了完整起见,我只想指出,您也可以使用一维数组。如果是按尺寸标注的尺寸,则您有:

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];

表达式必须具有常量值。我把原型改成了const,但没有:/维度中的一个必须是常量,读一下这个表达式必须有一个常量值。我把原型改成了const,但什么都没有:/其中一个维度必须是常量,读这篇文章,编码速度并不比向量向量快,运行速度也不比专门的矩阵类快。不过,它在内存管理方面的失败要比两者多得多。它的编码速度并不比向量向量快,运行速度也不比专门的矩阵类快。它在内存管理方面的失败远远不止这两个。新的Tile[size][size]无效C++@kotlomoy它对我来说很好,你是说你不能用“size”初始化数组吗?只有在大小不变的情况下你才能。新的Tile[size][size]无效C++@kotlomoy它对我来说很好,你是说你不能用“大小”初始化数组吗?你可以,只有当大小是常量时。我如何在类头中声明它?如何根据传递给init函数的参数更改其大小?@Split Well vector有一个成员函数,因此您可以使用它。至于类头,您打算在哪里使用它?在main内部,对于一个类?我打算在一个类中使用它,我如何在类头中声明它?如何根据传递给init函数的参数更改其大小?@Split Well vector有一个成员函数,因此您可以使用它。至于类头,您打算在哪里使用它?在main内部,用于一个类?我打算在一个类中使用它