1. ホーム
  2. c++

[解決済み] 静的ベクトルの初期化

2022-02-02 12:24:11

質問

静的ベクトルを初期化する方法として、以下のようなものがあるでしょうか?

class Foo
{
    static std::vector<int> MyVector;
    Foo()
    {
        if (MyVector.empty())
        {
            MyVector.push_back(4);
            MyVector.push_back(17);
            MyVector.push_back(20);
        }
    }
}

サンプルコードです :)

push_back()の値は、配列などではなく、独立した形で宣言されています。

編集:もし可能でなければ、それも教えてください :)

解決方法は?

通常、私はコンテナを構築するためのクラスを持っていて、それを使用します(例えば これ をboostから取得)することができるようなものです。

const list<int> primes = list_of(2)(3)(5)(7)(11);

そうすれば、staticもconstにすることで、不用意な改変を防げます。

staticの場合は、.ccファイルで定義すればよいでしょう。

// Foo.h

class Foo {
  static const vector<int> something;
}

// Foo.cc

const vector<int> Foo::something = list_of(3)(5);

C++Oxでは、イニシャライザーリストを使って、これを行う言語メカニズムが用意されているので、それを使えばいいのです。

const vector<int> primes({2, 3, 5, 7, 11});

参照 こちら .