如何使用初始化列表初始化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
答案 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};
。