1. ホーム
  2. c++

[解決済み] 2次元のstd::vectorの初期化

2022-03-05 23:34:39

質問

そこで、以下のようにしました。

std::vector< std::vector <int> > fog;

というように、非常に素朴な初期化をしています。

    for(int i=0; i<A_NUMBER; i++)
    {
            std::vector <int> fogRow;
            for(int j=0; j<OTHER_NUMBER; j++)
            {
                 fogRow.push_back( 0 );
            }
            fog.push_back(fogRow);
    }

そして、それは非常に間違っているように感じる... このようにベクトルを初期化する他の方法はないのでしょうか?

どのように解決するのですか?

を使用します。 std::vector::vector(count, value) コンストラクタは、初期サイズとデフォルト値を受け取ります。

std::vector<std::vector<int> > fog(
    ROW_COUNT,
    std::vector<int>(COLUMN_COUNT)); // Defaults to zero initial value

ゼロ以外の値、例えば 4 例えば、その時、デフォルトであることが要求されていた。

std::vector<std::vector<int> > fog(
    ROW_COUNT,
    std::vector<int>(COLUMN_COUNT, 4));

また、C++11で導入された一様な初期化についても触れておきます。 vector を使用して、他のコンテナ {} :

std::vector<std::vector<int> > fog { { 1, 1, 1 },
                                    { 2, 2, 2 } };