C++ 堆栈上的大型多维数组[重复]

问题描述 投票:0回答:1

我的模拟尝试预测系统在很长一段时间内的需求...输出结果是一个非常大的 4D 数组(我使用 4 维来最大程度地减少数据写入数组时出错的可能性)也就是说,这样我可以更好地理解它!)。

数组大小为 25x4x3x20000,我需要它至少是一个(无符号整数),但我知道堆栈无法处理这么大的数据量。

unsigned int ar[25][4][3][2000];

我四处寻找并找到了不同的解决方案。但是我仍然不确定要实施哪一个。所以我的问题是:就性能和良好实践而言,哪一个更好:

  1. 使用数组向量:stackoverflow.com/questions/18991765中所述...但是关于如何转换为 4D 维度有什么想法吗?

std::vector< std::array<int, 5> > vecs;
  vecs.reserve(N);

  1. 使用4D向量和push_back():我没有使用这个,因为我知道数组的最终大小,并且我想防止许多push_backs操作。
  2. 在堆上创建数组:如中所述 stackoverflow.com/questions/675817

如有其他建议,我们将不胜感激!

c++ multidimensional-array
1个回答
1
投票

最大的问题是最终维度中的

[2000]
。让它充满活力。

拥有这样的 3D 阵列:

using arr3d = std::array<std::array<std::array<unsigned int, 25>, 4>, 3>;

然后是第四维的向量:

std::vector<arr3d> ar;
ar.reserve(N); // for optimization
© www.soinside.com 2019 - 2024. All rights reserved.