Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何分配&;访问3D、4D、5D阵列?_C++_Visual C++ - Fatal编程技术网

C++ 如何分配&;访问3D、4D、5D阵列?

C++ 如何分配&;访问3D、4D、5D阵列?,c++,visual-c++,C++,Visual C++,如何以连续的方式为一个malloc分配3D、4D、5D阵列并访问单个项目 大概是这样的: int* array = malloc(sizeof(int) * width * height); int item = array[x + y * width]; 三维阵列是二维阵列的阵列。4D阵列是三维阵列的阵列。你只需要乘以你的其他维度。例如,可以通过以下方式分配3D阵列: int *array = malloc(sizeof(int) * width * height * depth); 4D

如何以连续的方式为一个malloc分配3D、4D、5D阵列并访问单个项目

大概是这样的:

int* array = malloc(sizeof(int) * width * height);
int item = array[x + y * width];

三维阵列是二维阵列的阵列。4D阵列是三维阵列的阵列。你只需要乘以你的其他维度。例如,可以通过以下方式分配3D阵列:

int *array = malloc(sizeof(int) * width * height * depth);
4D阵列可以通过乘以其他维度来制作:

int *array = malloc(sizeof(int) * width * height * depth * other_dimension);
等等,用于5D、6D等阵列

假设您可以访问阵列的宽度和高度,则可以通过以下方式访问元素(对于三维阵列,很容易扩展):

int get_element(int x, int y, int z)
{
    return array[(z * width * height) + (y * width) + x];
}
对于4D阵列:

int get_element(int x, int y, int z, int dimension_4)
{
    return array[(dimension_4 * width * height * depth) + (z * width * height) + (y * width) + x];
}

数组本质上是作为单个维度分配的。通过计算索引的方式赋予它们维度。您需要分配的大小是一个标量元素的大小乘以您打算使用的每个维度中的元素数,例如,如果您想要一个由4字节元素组成的10 x 20 x 30数组,则乘以4 x 10 x 20 x 30以获得所需的malloc的大小。然后,我可能会编写一个函数,比如
my_index(inti,intj,intk)
,它将计算任何有效(I,j,k)组合的一维索引。这个想法可以扩展到您想要的任意多个维度。

如这里所回答的():

请特别查看
computeIndex
/
computeIndex

#包括
#包括
模板
类多数组
{
公众:
显式多数组(const std::vector&dimensions):
尺寸(尺寸),
值(计算TotalSize(尺寸))
{
断言(!dimensions.empty());
断言(!values.empty());
}
常量T&get(常量标准::向量和索引)常量
{
返回值[计算索引(索引)];
}
T&get(常量标准::向量和索引)
{
返回值[计算索引(索引)];
}
大小计算索引(常量标准::向量和索引)常量
{
断言(index.size()==dimensions.size());
尺寸指数=0;
尺寸=1;
对于(size_t i=0;i!=dimensions.size();+i){
断言(索引[i]<维度[i]);
索引+=索引[i]*mul;
mul*=尺寸[i];
}
断言(索引

就像你刚才展示的那样。继续增加乘数,乘数?这有公式吗?是的,但如何访问每个项目?在3D、4D、5D等中,是否可以在没有这么多乘法的情况下进行访问?:)据我所知没有。Jared42的答案需要相同数量的乘法,只是在一个循环中。