gpt4 book ai didi

c++ - 指向 C++ 中的 3 维数组

转载 作者:行者123 更新时间:2023-11-28 05:45:37 28 4
gpt4 key购买 nike

我在谷歌上搜索过,但只找到了一维数组的答案。

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

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

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

最佳答案

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

我建议您使用一维 vector ,然后您可以使用数学来伪造 3 个维度。这将使数据对缓存更友好,因为多维 vector 不必像多维数组那样将每个维度都紧挨着放置。

所以不用

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]

关于c++ - 指向 C++ 中的 3 维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36284141/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com