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} };

第一个构造 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};

于 2013-07-18T06:40:00.127 回答