13

初期化リストを使用して 2D ベクトルを初期化するにはどうすればよいですか? 法線ベクトルの場合:

vector<int> myvect {1,2,3,4};

で十分でしょう。しかし、2D の場合:

vector<vector<int>> myvect{ {10,20,30,40},
                            {50,60,70,80}
                          };

それを行う正しい方法は何ですか?
そして、forを使用してそれをどのように繰り返すことができますか?

for(auto x: myvect)
{
    cout<<x[j++]<<endl;
}

これはショーのみの場合: 10,1 !

ところで、これはどういう意味ですか?

   vector<int> myvect[5] {1,2,3,4};

私はここでそれを見ましたが、理解できません!リンク

4

1 に答える 1

16

それを行う正しい方法は何ですか?

あなたが示した方法は可能な方法です。以下を使用することもできます。

vector<vector<int>> myvect = { {10,20,30,40},
                               {50,60,70,80} };

vector<vector<int>> myvect{ vector<int>{10,20,30,40},
                            vector<int>{50,60,70,80} };

最初のものstd::initializer_list<std::vector<int>>は、要素が内部の中括弧初期化子リストから直接初期化される a を構築します。2 番目のものは、一時的なベクトルを明示的に作成し、それを に移動しstd::initializer_list<std::vector<int>>ます。その動きは省略できるため、これはおそらく違いはありません。

いずれにせよ、 の要素は にstd::initializer_list<std::vector<int>>コピーされmyvectます ( から移動することはできませんstd::initializer_list)。


そして、forを使用してそれをどのように繰り返すことができますか?

基本的にvector の vector があるため、2 つのループが必要です。

for(vector<int> const& innerVec : myvect)
{
    for(int element : innerVec)
    {
        cout << element << ',';
    }
    cout << endl;
}

auto結果の型を明示的に表示するために使用することは控えました。


ところで、これはどういう意味ですか?

これはおそらくタイプミスです。このままでは違法です。宣言は 5 の配列をvector<int> myvect[5];宣言します。したがって、次のリスト初期化では配列を初期化する必要がありますが、このリストの要素は暗黙的に変換できません( を受け取る ctor がありますが、明示的です)。vector<int>vector<int>size_t

それはその辺のコメントですでに指摘されています。

作者が書きたかったのでしょうstd::vector<int> vArray = {3, 2, 7, 5, 8};

于 2013-07-18T06:40:00.127 に答える