繁体   English   中英

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

[英]Creating a 3D array in C++ using passed in parameters

我有一个接受void *缓冲区参数的函数。 该函数(由HDF 在此处提供。据我所知,它将数据集中的信息读取到缓冲区中。我可以正常工作,但是仅当我使用常量值创建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值的预先实现效果很好:

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数组仅适用于3D数组,而2D数组仅适用于2D数组。缓冲)。

因此,我的主要问题是,我似乎无法弄清楚如何创建读取函数满意的3D int数组(函数参数为void *,但除3d int数组工作)。 我尝试使用以下方法将3D int数组表示为由数组组成的数组:

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

但这也失败了。 关于如何创建int arrayName [非常数值] [非常数值] [非常数值]形式的3D整数数组的任何想法? 我知道您不能使用非恒定值创建数组,但是我添加了它们以阐明我的目标。 在C ++中是否应该有一种方法可以将函数参数用作实例化数组的值?

像这样做:

    std::vector<int> array;

    array.resize(Nx*Ny*Nz);

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

拥有array [z] [y] [x]语法是很好的,但是支持它比它值得的麻烦更多。

我认为最简单的方法是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM