【问题标题】:Create an array using a pointer [duplicate]使用指针创建数组[重复]
【发布时间】:2013-06-02 00:30:14
【问题描述】:

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

我试过了

//Class header
Tile * gameTile;

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

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

【问题讨论】:

标签: c++


【解决方案1】:

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

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

【讨论】:

  • 如何在类头中声明它?如何根据传递给 init 函数的参数更改它的大小?
  • @Split Well 向量有一个resize() 成员函数,所以你可以使用它。
  • 至于类头 - 你打算在哪里使用它?在 main 里面,上课吗?
  • 我打算在课堂上使用它
【解决方案2】:

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

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

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

【讨论】:

  • 编码并不比向量向量快,运行起​​来也不比专门的矩阵类快。但是,它在内存管理方面的失败远不止两者。
【解决方案3】:

虽然您想使用二维数组,但为了完整性,我只想指出您也可以将一维数组用于您的目的。如果它是按尺寸排列的尺寸,那么您有:

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

【讨论】:

    【解决方案4】:

    你可以的

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

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

    【讨论】:

    • new Tile[size][size] 不是有效的 C++
    • @kotlomoy 它对我来说很好用,你是说你不能使用 'size' 初始化一个数组?
    • 你可以,只有size 是常数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    相关资源
    最近更新 更多