作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我创建了一个类,它通过将数据存储在一维数组中并重载 () 运算符
来模仿 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()
返回 depth
,sy()
- 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/
我是一名优秀的程序员,十分优秀!