声明一个二维向量

Declaring a 2D vector

在某些情况下只有下面一行works.Why所以?

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

这在任何情况下都有效。

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

有什么区别?

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

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

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

为了声明一个二维向量,我们必须首先定义一个一维数组,其大小等于所需二维向量的行数。 假设我们要创建一个 k 行 m 列的向量

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

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

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

这样你就可以声明一个二维向量