3
vector<bool> working_lattice(box.rect.length * box.rect.height * box.rect.width);

如何working_lattice[1][5][3]使用上述声明样式访问?

4

3 回答 3

4

您需要以

(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);
于 2012-04-14T06:08:22.347 回答
3

这取决于您使用的是行优先还是列优先排序。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]

这显然很烦人,因此您可能需要定义一个内联函数或其他帮助。

于 2012-04-14T06:05:58.020 回答
1

即考虑这个:

A[R][S][T]

假设它的基地址是addr_base_A

所以你希望你能得到一个特定元素的地址A[i][j][k]

我认为的答案是:S*T*i + T*j + k + addr_base_A

希望这可以帮助 :)

于 2018-07-28T14:35:52.103 回答