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

これは、行優先または列優先のどちらの順序を使用しているかによって異なります。行優先は C/C++ でより一般的ですが、手動で行う場合はどちらでもかまいません。

box.rect.height * box.rect.width * i行優先の順序付けでは、i、j、k 番目の要素に到達するには、要素を通過してith 行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]

これは明らかにかなり面倒なので、インライン関数などを定義した方がよいかもしれません。

于 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 に答える