[英]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.