gpt4 book ai didi

c++ - 使用平面数组访问多维数组数据

转载 作者:行者123 更新时间:2023-11-30 03:58:57 27 4
gpt4 key购买 nike

这个问题让我陷入困境,我无法弄清楚这里发生了什么:

我正在尝试实例化 1D 数组以模拟 3D 数组。

我将我的数组实例化为:

int *cache = new int[width*heigh*depth];

并通过

访问它
int data = cache[x + width * (y + depth * z)];

其中 x 是垂直索引,y 是水平索引,z 是深度。

在我的实现中,我需要 n*4 个索引,其中 n = width*height,4 是 z 值。

我有 x 和宽度,从中我可以计算出高度(可以假设 x/宽度始终为整数)。

我遇到的问题是上述索引模式仅在“宽度”值为 2 时有效!

我需要在宽度可以是 1、2、4 或 x(高度为 1)的单独实例中访问我的数组元素。

我写了下面的代码来证明差异。

numWays 是我想要的“宽度”。numSets 是“高度”。blockCount 是 block 的总数,相当于 numWays*numSets。

如果计算出的索引大于数组中允许的最大索引(逻辑上应该是 (blockCount*4)-1),代码会打印出错误。

   int cacheSize = 1024;
int blockSize = 8;
int blockCount = cacheSize/blockSize;
int numWays = 2;
int numSets = blockCount / numWays;

int maxAllowableIndex = blockCount*4-1;

for(int set = 0; set < numSets; set++){
for(int way = 0; way < numWays; way++){
for(int i = 0; i < 4; i++){
if(set+numSets*(way+4*i) > maxAllowableIndex) std::cout << "ERROR" << std::endl;
}
}
}

对于 numWays != 2 的任何运行都会打印错误,即使 numWays*numSets = blockCount。为什么会这样,我该如何修改我的索引架构来执行我想要的操作?

谢谢!

最佳答案

在下面两行中:

int data = cache[x + width * (y + depth * z)];

where x is the vertical index, y is the horizontal, and z is the depth.

我觉得你还不够小心。你应该这样做:

int data = cache[z + depth * (y + width * x)];

的确,如果你用十进制来思考,你就是单位 + 10*十位 + 100*百位。但是你做的是百+10*十+100*单位。

希望对您有所帮助!

托尼

关于c++ - 使用平面数组访问多维数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27157480/

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