gpt4 book ai didi

c++ - 快速访问数组中的数据

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:27 25 4
gpt4 key购买 nike

我的问题就在这里。
我有四个 3 维表,它们是一种查找表 (32x32x32),我必须在其中用 C++ 非常快速地实时检索值。
我的主要目标是计算时间,因为必须进行大量操作,良好的编程习惯是次要的,因为我不太担心代码维护。在大多数个人计算机上实现此目的的最佳解决方案是什么?
我考虑过将数据存储在全局变量上并将它们放在一个单独的文件中,并通过“extern const float first[32][32][32];”之类的声明来使用它们。或从文件加载 vector 。
但我想后者会更慢,因为数据必须通过一个指针访问。
还有其他解决方案吗?

我在网上搜索了一下,但是当我看到不同的真相时,这让我更加困惑。
例如,这两个网站似乎不建议相同的东西(如果我理解正确的话):site1 , site2

最佳答案

访问多维数组中的数据

float data[32][32][32];
data[i][j][k];

完全等同于访问扁平数组

float data[32768];
data[i * 1024 + j * 32 + k];

没有涉及额外的指针,只是对数组索引进行运算。

在性能方面,extern const float [32][32][32]将为编译器提供优化整个程序的机会,因为它将完全访问数据以及您如何使用它。

将文件中的数据加载到动态大小的 vector<vector<vector<float>>>会导致多个指针间接访问数据元素;鉴于您知道数据的大小,将其加载到 static float[32][32][32] 中会更有效率。

对于编译时范围未知的数据,一个好的选择是使用 Boost.MultiArray :

typedef boost::multi_array<float, 3> array_type;
array_type A(boost::extents[32][32][32]);

A[i][j][k] = 5.0f;

关于c++ - 快速访问数组中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490279/

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