使用C++ 11中的初始化列表初始化2D向量

Rik*_*ika 9 stdvector c++11

如何使用初始化列表初始化2D矢量?对于正常的向量做:

vector<int> myvect {1,2,3,4};
Run Code Online (Sandbox Code Playgroud)

就够了 但对于2D人来说:

vector<vector<int>> myvect{ {10,20,30,40},
                            {50,60,70,80}
                          };
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?
我怎么能用它来迭代呢?

for(auto x: myvect)
{
    cout<<x[j++]<<endl;
}
Run Code Online (Sandbox Code Playgroud)

这仅用于显示:10,1!

顺便说一下这是什么意思?

   vector<int> myvect[5] {1,2,3,4};
Run Code Online (Sandbox Code Playgroud)

我在这里看到它并且无法理解它!链接

dyp*_*dyp 12

这样做的正确方法是什么?

你展示的方式是一种可能的方式.你也可以使用:

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} };
Run Code Online (Sandbox Code Playgroud)

第一个构造一个std::initializer_list<std::vector<int>>元素从内部braced-initializer-lists直接初始化的位置.第二个显式构造临时向量,然后将其移入a std::initializer_list<std::vector<int>>.这可能没有什么区别,因为这一举动可以省略.

无论如何,它的元素std::initializer_list<std::vector<int>>被复制回myvect(你不能移出a std::initializer_list).


我怎么能用它来迭代呢?

你基本上有一个向量向量,因此你需要两个循环:

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

我没有使用auto明确显示结果类型.


顺便说一下这是什么意思?

这可能是一个错字.就目前而言,这是非法的.声明vector<int> myvect[5];声明一个5vector<int>数组.因此,下面的列表初始化需要初始化数组,但是这个列表的元素不能隐式转换为vector<int>(有一个ctor,它需要a size_t,但它是显式的).

这一点已在该方的评论中指出.

我想作者想写std::vector<int> vArray = {3, 2, 7, 5, 8};.