声明一个二维向量
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);
这样你就可以声明一个二维向量
在某些情况下只有下面一行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);
这样你就可以声明一个二维向量