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);
これは、行優先または列優先のどちらの順序を使用しているかによって異なります。行優先は C/C++ でより一般的ですが、手動で行う場合はどちらでもかまいません。
box.rect.height * box.rect.width * i
行優先の順序付けでは、i、j、k 番目の要素に到達するには、要素を通過してi
th 行box.rect.width * j
に到達し、要素をj
加えてその行の th 列に到達し、さらに要素にk
戻る必要があります。k
番目の要素の深さ。超明示的にするには:
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
.
お役に立てれば :)