1

静的配列を初期化する必要があります。すべての値が連続しているわけではありません。

このようなものは、シーケンシャル配列に対してうまく機能します:

class Foo {

  public:

  static const char * name[];

}

const char * Foo::name[] = { "Sun", "Moon" };

配列内の任意の位置に値を割り当てるにはどうすればよいですか? 私はこのようなことをする必要があります(疑似コード):

const char * Foo::name[] = { 67: "Sun", 68: "Moon" };

配列が 255 より大きくなることはありません。インデックスはバイト値から取得されます。


誰かが私が望むものに似たものの例を挙げているスレッドの一部を見つけましたが、このようなものを機能させることができませんでした.

type array[SIZE] = {[SIZE-4]=1, 2, 3, 4};
4

2 に答える 2

4

std::map<int, std::string>配列の代わりに(またはunordered_mapC++11 をサポートしている場合)使用することをお勧めします。次に、コードを使用してこのマップに挿入し、m[67] = "Sun"を使用してアイテムを取得できますstd::string s = m[67];

于 2012-07-04T03:59:00.403 に答える
1

以下は、昔ながらのアプローチの 1 つです。

class NameArray {
  public:
    NameArray()
    {
      array[67] = "Sun";
      array[68] = "Moon";
    }

    const char *operator[](size_t index) const
    {
      assert(index<256);
      return array[index];
    }


  private:
    const char * array[256];
};

class Foo {
  public:
    static NameArray name;
};

NameArray Foo::name;

配列をクラスでラップすることにより、必要な値で構成されていることを確認できます。境界チェックを行うこともできます。

于 2012-07-04T04:06:55.727 に答える