我在google上搜索过,但只找到了单维数组的答案。
我有一个3维数组,用于存储稍后由函数处理的数据。
我的数组如下所示:levelcode[400][20][100]
。它存储解码级别功能所需的所有信息。我立即收到堆栈溢出错误。
但是我怎样才能指向整个数组来获取它的值(或者我如何传递整个数组?)?
我知道我可以从技术上调用每个现有参数的函数,但我认为它会更快,如果整个数组传递下来或使用某种指针使用它会更好看。 我怎么能做到这一点?
答案 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]