什么是正确的做法?
你展示的方式是一种可能的方式。您还可以使用:
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} };
第一个构造 a std::initializer_list<std::vector<int>>
,其中元素直接从内部花括号初始化器列表初始化。第二个显式构造临时向量,然后将其移动到std::initializer_list<std::vector<int>>
. 这可能不会有什么不同,因为这个动作可以省略。
无论如何, 的元素都会std::initializer_list<std::vector<int>>
被复制回myvect
(您不能移出 a std::initializer_list
)。
我如何使用 for 遍历它?
你基本上有一个vectors的vector,因此你需要两个循环:
for(vector<int> const& innerVec : myvect)
{
for(int element : innerVec)
{
cout << element << ',';
}
cout << endl;
}
我避免使用auto
显式显示结果类型。
顺便说一句,这是什么意思?
这可能是一个错字。就目前而言,这是非法的。该声明vector<int> myvect[5];
声明了一个数组 5vector<int>
。因此,以下列表初始化需要初始化数组,但此列表的元素不能隐式转换为vector<int>
(有一个接受 a 的 ctor size_t
,但它是显式的)。
那方面的评论中已经指出了这一点。
我猜作者想写std::vector<int> vArray = {3, 2, 7, 5, 8};
。