vector<bool> working_lattice(box.rect.length * box.rect.height * box.rect.width);
如何working_lattice[1][5][3]
使用上述声明样式访问?
vector<bool> working_lattice(box.rect.length * box.rect.height * box.rect.width);
如何working_lattice[1][5][3]
使用上述声明样式访问?
您需要以
(i * length * height) + (j * height) + k
所以在你的情况下
working_lattice[(i * box.rect.length * box.rect.height) + (j * box.rect.height) + k);
或者
working_lattice[(1 * box.rect.length * box.rect.height) + (5 * box.rect.height) + 3);
编辑:既然你在别处提到 x, y, z
working_lattice[(x * box.rect.length * box.rect.height) + (y * box.rect.height) + z);
这取决于您使用的是行优先还是列优先排序。Row-major 在 C/C++ 中更为典型,但如果您手动执行,则可以执行任一操作。
在行优先排序中,要到达第 i、j、k' 个元素,您需要遍历box.rect.height * box.rect.width * i
元素才能到达i
第 th 行,加上box.rect.width * j
元素才能到达该行的j
第 th 列,再加k
上才能返回深度方向的k
第 th 个元素。要超级明确:
const size_t n_x = box.rect.length;
const size_t n_y = box.rect.height;
const size_t n_z = box.rect.width;
working_lattice[1 * n_x * n_z + 5 * n_z + 3]
这显然很烦人,因此您可能需要定义一个内联函数或其他帮助。
即考虑这个:
A[R][S][T]
假设它的基地址是addr_base_A
,
所以你希望你能得到一个特定元素的地址A[i][j][k]
,
我认为的答案是:S*T*i + T*j + k + addr_base_A
。
希望这可以帮助 :)