使用传入的参数在C ++中创建3D数组

时间:2017-01-04 21:52:15

标签: c++ arrays hdf5 hdf

我有一个接受 void * buffer 参数的函数。这个函数(由HDF here提供。根据我的理解,它从数据集读取信息到缓冲区。我有这个工作,但只有我用常量值创建一个3d int数组。我需要是能够使用用户传入的值来完成此操作。 这是该功能的开始:

void* getDataTest(int countX, int countY)
{
    int NX = countX;
    int NY = countY;
    int NZ = 1;

    int data_out[NX][NY][NZ]; //I know this doesn't work, just posting it for reference

   //.
   //. more code here...
   //.

   // Read function is eventually called...
   h5Dataset.read(data_out, H5::PredType::NATIVE_INT, memspace, h5Dataspace);
}

这对我来说总是失败。但是,我在创建data_out数组时使用const int值的previoud实现工作正常:

void* getDataTest(int countX, int countY)
{
    const int NX = 5;
    const int NY = 5;
    const int NZ = 1;

    int data_out[NX][NY][NZ]; 

   //.
   //. more code here...
   //.

   // Read function is eventually called...
   h5Dataset.read(data_out, H5::PredType::NATIVE_INT, memspace, h5Dataspace);
}

这很好用。根据我的理解,这个函数(我无法控制)需要相同维度的数据空间(例如,3D数组只能用于3D数组,而2D数组只能在将数据复制到数据时才能使用2D数组。缓冲液)。

所以,我的关键问题是我似乎无法弄清楚如何创建一个读取函数满意的3D int数组(函数参数是一个无效*但我可以&#t; t似乎除了3d int数组之外还可以使用其他任何东西。我尝试使用以下代码表示为数组数组的3D int数组:

   int*** data_out = new int**[NX];

但这也失败了。关于如何创建int arrayName [非常量值] [非常量值] [非常量值]形式的3D int数组的任何想法?我知道你不能使用非常量值创建数组,但我添加了它们以试图澄清我的目标。在C ++中是否应该使用函数参数作为实例化数组的值?

2 个答案:

答案 0 :(得分:2)

这样做:

    std::vector<int> array;

    array.resize(Nx*Ny*Nz);

    array[z*Ny*Nx + y*Nx + x] = value

使用数组[z] [y] [x]语法很好,但支持它比它的价值更麻烦。

答案 1 :(得分:2)

我认为最简单的方法就是这样做:

int* data_out = new int[NX * NY * NZ];

然后,您可以将此1D数组作为3D数组访问:

int value = array[z * NX * NY + y * NX + x];

在更多C ++ 11样式中,您可以使用std::vector

std::vector<int> data_out;
data_out.resize(NX * NY * NZ);

并调用函数:

h5Dataset.read(data_out.begin(), H5::PredType::NATIVE_INT, memspace, h5Dataspace);