gpt4 book ai didi

c++ - 使用参数在 C++ 中实例化 3D 数组

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:25 26 4
gpt4 key购买 nike

抱歉,如果这是一个菜鸟问题,但我目前正在学习 C++。我有一个接受多个参数的函数——我想在创建 3D int 数组时使用这些参数。

void* testFunction(int countX, int countY, int countZ)
{
const int NX = countX;
const int NY = countY;
const int NZ = countZ;

int* data_out = new int*[NX][NY][NZ];
// The above line throws the error on "NY" - expression must
// have a constant value
}

从各种帖子中我了解到您必须首先分配数组,但我想我做错了吗?如何正确初始化多维数组。另外,为什么初始化需要指针?

最佳答案

解释错误:C++ 在其 new 中需要一个类型的名称运算符(operator)。类型的名称不能有运行时维度,因为 C++ 中的所有类型都是静态的(在编译时确定)。

例如,这分配了 3 个类型为 int[4][5] 的元素:

new int[3][4][5];

另一个例子:这分配 NX 类型的元素 int[4][5] :

new int[NX][4][5];

一个不正确的例子:这将分配 int[NY][NZ] 类型的 NX 元素,如果 C++ 支持“动态”类型:

new int[NX][NY][NZ];

要分配一个 3 维数组或类似的东西,您可以使用 std::vector :

std::vector<std::vector<std::vector<int>>> my_3D_array;
... // initialization goes here
my_3D_array[2][2][2] = 222; // whatever you want to do with it

为了使语法不那么冗长并简化初始化,请使用 typedef (或此处 using ,两者相同):

using int_1D = std::vector<int>;    // this is a 1-dimensional array type
using int_2D = std::vector<int_1D>; // this is a 2-dimensional array type
using int_3D = std::vector<int_2D>; // this is a 3-dimensional array type
int_3D data(NX, int_2D(NY, int_1D(NZ))); // allocate a 3-D array, elements initialized to 0
data[2][2][2] = 222;

如果你想从你的函数中返回这个数组,你应该声明它;你不能只返回 void指向 data 的指针多变的。这是声明的语法:

using int_1D = std::vector<int>;
using int_2D = std::vector<int_1D>;
using int_3D = std::vector<int_2D>;
int_3D testFunction(int countX, int countY, int countZ)
{
int_3D data(...);
...
return data;
}

也就是说,不使用 new , 只需使用 std::vector<whatever>就好像它是任何其他类型一样。

关于c++ - 使用参数在 C++ 中实例化 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471557/

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