web-dev-qa-db-ja.com

2次元のstd :: vectorの初期化

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

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

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

87
Ferenc Deak

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

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

ゼロ以外の値、たとえば4がデフォルトである必要がある場合:

std::vector<std::vector<int> > fog(
    A_NUMBER,
    std::vector<int>(OTHER_NUMBER, 4));

また、{}を使用してvectorおよびその他のコンテナの初期化を許可するC++ 11で統一された初期化が導入されていることにも言及する必要があります。

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

std::vectorにはappendメソッドはありませんが、intA_NUMBERベクトルを含むベクトルを作成したい場合は、それぞれother_numberゼロを含むベクトルを作成できます。

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));
31
juanchopanza

初期値を0にして2Dベクトルm * nを初期化するとします。

これができる

#include<iostream>
int main(){ 
    int m = 2, n = 5;

    vector<vector<int>> vec(m, vector<int> (n, 0));

    return 0;
}
16
Jason

すでに示した一般的な構文は次のとおりです。

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))  

ここで、ベクトル「v」は、「A_NUMBER」行、「OTHER_NUMBER」列、および初期値が「DEFAULT_VALUE」に設定された列の2次元配列として視覚化できます。

また、次のように書くこともできます。

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)

2次元ベクトルへの値の入力は、2次元配列への値の入力に似ています。

for(int i = 0; i < A_NUMBER; i++) {
     for(int j = 0; j < OTHER_NUMBER; j++) {
         std::cin >> v[i][j]
     }
}

例はすでに他の回答に記載されています。

4
sarthak-sopho

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

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

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

0

推奨されるアプローチは、fillコンストラクターを使用して、指定されたデフォルト値で2次元ベクトルを初期化することです。

vector<std::vector<int>> fog(M, std::vector<int>(N, default_value));

ここで、MとNは2Dベクトルの次元です。

0
Smit