gpt4 book ai didi

c++ - 在 C++ 中循环遍历 3d 索引的 1d 数组

转载 作者:太空狗 更新时间:2023-10-29 20:36:47 24 4
gpt4 key购买 nike

我创建了一个类,它通过将数据存储在一维数组中并重载 () 运算符 来模仿 3D bool 数组。我已经尝试了所有我能找到和想到的方法,例如,这段代码:

bool operator()(unsigned x, unsigned y, unsigned z) const { return _data[_zSize*_ySize*x + y*_ySize + z]; }

允许我访问我需要的每个元素(我知道 (x,y,z) 实际上在这里 (z,y,x) 但它不取决于我),当我尝试迭代时遇到问题通过数组。考虑一个深度为 3、高度为 4、宽度为 5 的 3D 数组,每个元素都初始化为 false。当我尝试反转数组中的所有值时(其中 sx() 返回 depthsy() - height, sz() - 宽度)

for (unsigned i = 0; i < x.sx(); ++i)
for (unsigned j = 0; j < x.sy(); ++j)
for (unsigned k = 0; k < x.sz(); ++k)
x(i, j, k) = !x(i, j, k);

我得到以下结果(剩下的两个表面看起来一样):

11110
01110
01110
01111

所以,显然有些元素被访问和反转了两次。当我尝试不同的索引数组的方法时,模式会发生变化。有什么问题?

最佳答案

正确的运算符是

bool operator()(unsigned x, unsigned y, unsigned z) const { 
return _data[_zSize*_ySize*x + y*_zSize + z];
}

关于c++ - 在 C++ 中循环遍历 3d 索引的 1d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253905/

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