161

だから、私は次のものを持っています:

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);
    }

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

4

12 に答える 12

279

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 } };
                           
于 2013-07-15T20:24:50.070 に答える
37

にはappendメソッドはありませんが、ゼロを含むstd::vectorのベクトルを含むA_NUMBERベクトルを作成する場合は、次のようにします。intother_number

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));
于 2013-07-15T20:25:11.770 に答える
6

それを行う最も簡単な方法は次のとおりだと思います:

std::vector<std::vector<int>>v(10,std::vector<int>(11,100));

10 はメインの外部ベクトルまたはグローバル ベクトルのサイズであり、11 は int 型の内部ベクトルのサイズであり、初期値は 100 に初期化されます。それがスタックに関する私の最初のヘルプです。誰かの助けになると思います。

于 2019-06-17T22:12:18.403 に答える
0

この回答は、宣言後に 2 次元ベクトルを簡単に初期化するのに役立ちます。

int n=4,m=3;
int default_value = 0;

std::vector<std::vector<int>> matrix;

matrix.resize(m, std::vector<int>(n, default_value));
于 2021-09-10T20:22:32.177 に答える