声明2D矢量

问题描述 投票:21回答:2

在某些情况下,只有下面的行有效。为什么?

vector< vector<int>> a(M,N);

这适用于所有情况。

vector< vector<int>> a(M, vector<int> (N));

有什么不同?

c++ vector stl
2个回答
40
投票

std::vector有一个填充构造函数,它创建一个n元素的向量,并用指定的值填充。 a的类型为std::vector<std::vector<int>>,这意味着它是向量的向量。因此,填充向量的默认值是向量本身,而不是int。因此第二个选项是正确的。

std::vector<std::vector<int>> array_2d(rows, std::vector<int>(cols, 0));

这将创建一个行* cols 2D数组,其中每个元素为0.默认值为std::vector<int>(cols, 0),这意味着每行都有一个向量,其中包含cols个元素,每个都为0。


1
投票

为了声明2D矢量,我们必须首先定义大小等于所需2D矢量的行数的1D阵列。我们想要创建一个k行和m列的向量

 "vector<vector<int>> track(k);"

这将创建一个大小为k的向量。然后使用resize方法。

for (int i = 0; i < k; i++) {
    track[i].resize(m);

通过这种方式,您可以声明2D矢量

© www.soinside.com 2019 - 2024. All rights reserved.