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

时间:2013-07-18 04:28:25

标签: c++11 stdvector

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

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

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

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

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

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

这仅用于显示: 10,1!

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

   vector<int> myvect[5] {1,2,3,4};
我在这里看到它并且无法理解它! Link

1 个答案:

答案 0 :(得分:11)

  

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

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

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>>,其中元素直接从内部braced-initializer-lists初始化。第二个显式构造临时向量,然后将其移动到std::initializer_list<std::vector<int>>。这可能没有什么区别,因为这一举动可以省略。

以任何方式,std::initializer_list<std::vector<int>>的元素都会被复制回myvect(您无法移出std::initializer_list)。


  

我如何使用for?

进行迭代

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

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

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


  

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

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

已经指出in the comments of that side

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