初始化列表 (initializer list) 来简洁地初始化容器
这个语法糖是在 C++11 标准中引入的。在 C++11 中,可以使用初始化列表 (initializer list) 来简洁地初始化容器。这种方式更加方便和直观,比传统的循环遍历赋值要简洁明了。
如果你在使用旧版本的 C++,可能需要使用传统的循环遍历来初始化二维向量。以下是一个示例:
vector<vector<int>> vec2d(2, vector<int>(3));
int Z = 0; // 任意值 Z
for (int i = 0; i < vec2d.size(); ++i) {
for (int j = 0; j < vec2d[i].size(); ++j) {
vec2d[i][j] = Z;
}
}
当声明一个二维向量 vec2d
并初始化时,可以使用以下语法糖:
vector<vector<int>> vec2d(2, vector<int>(3, Z));
这里解释一下每个参数的意义:
-
vector<vector<int>>
:指定了容器的类型,即二维向量。 -
(2, vector<int>(3, Z))
:是一个构造函数的调用,其中包含两个参数。-
2
:表示要创建的二维向量的行数。在这个例子中,我们创建了2行。 -
vector<int>(3, Z)
:表示要创建的每一行的内容。 -
vector<int>
:指定了每一行的类型,即整型向量。 -
(3, Z)
:是一个构造函数的调用,其中包含两个参数。-
3
:表示要创建的每一行的列数。在这个例子中,我们创建了每一行有3列。 -
Z
:表示要赋给每个元素的值。这个值可以是任意值,根据你的需求而定。
-
-
因此,上述代码将生成一个2行3列的二维向量 vec2d
,其中每个元素的值都为 Z
。
推广
实际上简单的说应该是这样的:
vector<类型> name(元素个数, 元素初始值)
只不过二维矩阵就是这样: (类型为也为向量, 元素初始值也为向量)
vector<vector<类型>> name(vector<类型>元素个数, vector<类型>元素的初始值)
而上面的 vector<int>(3, Z)
则可以看做是一个匿名的 vector<类型>元素. 仅此罢了.