指向c ++中的3dimensional数组

时间:2016-03-29 12:21:15

标签: c++ arrays multidimensional-array visual-studio-2015

我在google上搜索过,但只找到了单维数组的答案。

我有一个3维数组,用于存储稍后由函数处理的数据。 我的数组如下所示:levelcode[400][20][100]。它存储解码级别功能所需的所有信息。我立即收到堆栈溢出错误。

但是我怎样才能指向整个数组来获取它的值(或者我如何传递整个数组?)?

我知道我可以从技术上调用每个现有参数的函数,但我认为它会更快,如果整个数组传递下来或使用某种指针使用它会更好看。 我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

我建议您使用std::vector。它基本上是一个自我管理的可成长阵列。它动态地存储数据(堆),因此您将使用完整的系统内存而不是为自动对象(堆栈)提供程序的小内存。使用levelcode[400][20][100],您有800,000个元素。如果数组类型为int,那么您可能需要3.2MB的空间用于阵列。通常这比提供给程序的空间大,并且会导致stack overflow

我建议您使用单维向量,然后您可以使用数学来伪造3维。这将使数据更加缓存友好,因为多维向量不必像多维数组那样使每个维度彼此相邻。

所以没有

std::vector<std::vector<std::vector<some_type>>> name{DIM1, vector<vector<some_type>>{DIM2, vector<some_type>{DIM3}}};

并使用它

name[x][y][z]

我们可以有一个

std::vector<some_type> name{DIM1 * DIM2 * DIM3};

然后您可以使用

访问元素
name[x*DIM2*DIM3 + y*DIM3 + z]