gpt4 book ai didi

c++ - 如何使用 new 在 C++ 中声明二维数组?

转载 作者:bug小助手 更新时间:2023-10-28 01:30:39 24 4
gpt4 key购买 nike

如何使用 new 声明二维数组?

例如,对于“正常”数组,我会:

int* ary = new int[Size]

但是

int** ary = new int[sizeY][sizeX]

a) 不起作用/编译,b) 没有完成什么:

int ary[sizeY][sizeX] 

会。

最佳答案

如果您的行长是编译时间常数,C++11 允许

auto arr2d = new int [nrows][CONSTANT];

this answer .像 gcc 这样允许可变长度数组作为 C++ 扩展的编译器可以使用 new as shown here要获得像 C99 允许的完全运行时可变的数组维度功能,但可移植的 ISO C++ 仅限于第一个维度是可变的。

另一个有效的选择是手动将 2d 索引到一个大的 1d 数组中,如 another answer shows ,允许与真正的 2D 数组相同的编译器优化(例如,证明或检查数组不会相互别名/重叠)。


否则,您可以使用 指向数组的指针数组 来允许 2D 语法,如连续的 2D 数组,即使它不是一个有效的单一大分配。您可以使用循环对其进行初始化,如下所示:

int** a = new int*[rowCount];
for(int i = 0; i < rowCount; ++i)
a[i] = new int[colCount];

上述对于 colCount= 5rowCount = 4 将产生以下结果:

enter image description here

在删除指针数组之前,不要忘记用循环分别delete每一行。 another answer 中的示例.

关于c++ - 如何使用 new 在 C++ 中声明二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/936687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com