1

ルックアップテーブルとして機能している3次元の静的const配列があります。配列の各セルは、最大8つの個別の数値を返すことができます(各数値は立方体の角、正確にはボクセルです)。したがって、たとえば、MyStaticArray[0][1][1]1,2,5,7を返す場合があります。1,2,3,4,5,6,7,8のように、単一の数値または最大8つの数値を返すことができます。

私はすでにルックアップテーブルを(紙に)準備していますが、私の質問はそれを保存するための最良の方法は何ですか?最初は私が行っていましたstatic const unsigned char[][][]が、テーブルが複数の数値を返す可能性があるため、この場合は明らかに機能しません(ここでも、1から8まで)。

次の解決策は、unsignedchar配列を返すことでした。つまり、static const unsigned char * [][][]です。これを初期化するにはどうすればよいですか(つまり、静的const配列を初期化して、クラスを初期化せずにアクセスできるように、静的でもあるunsigned char配列を返すにはどうすればよいですか?)もっと良い方法はありますか?

質問をきちんと説明できたと思います。そうでない場合は、私に知らせてください。言い換えたり、追加情報を提供したりします。

4

3 に答える 3

3

各要素を最大長までダミー要素で埋めて、4D配列を使用することができます。

static const unsigned char x[M][N][P][8] = { { 1, 2, 5, 7, -1, -1, -1, -1 },
                                             { 1, 2, 3, 4,  5,  6,  7,  8 },
                                             ...

または、個々のビットをフラグとして使用できます。例:

static const unsigned char x[M][N][P] = { 0x53, // Bits 0, 1, 4, 6 are set
                                          0xFF,
                                          ...

8つ以上の可能性が必要な場合は、eguint16_tまたはにアップグレードしてuint32_tください。

どの方法を使用するかは、データをどのように処理するかによって異なります。

于 2010-11-09T21:58:32.677 に答える
1

可能な8つの数値のうち0〜8のみを返すため、「数値」を1バイトのビットフィールドとして保持し、このセルで使用される数値の1つである場合はstatic const unsigned char[][][]ビットnが設定されるように格納する必要があると思います。したがって、fe 1,2 n、5,7は、 2進数01010011または0x5316進数としてエンコードされる場合があります。

于 2010-11-09T22:00:07.537 に答える
1

静的初期化を使用するには、配列の各次元を知る必要があります。あなたはすでにこれを知っていると思いますが、あなたの質問ではそれについて言及していなかったので、私の例では寸法[2][2][2]を使用します。

また、配列の各位置にある要素の数を決定する方法も必要になります。要素の数をリストの最初の値として指定するか、番兵の値を作成してリストの終わりをマークすることができます。

各リストを8つの要素にパディングするには、次のようになります。配列内の初期化されていない値はすべて0に設定されます。

static const unsigned char array[2][2][2][8] = {{{{1,2,3,4,5},{1,2,3,4,5,6,7,8}},{{4},{5}}},{{{...}}}};
于 2010-11-09T22:05:48.573 に答える