下表列出了定义vector
对象的常用方法。
表 1:初始化vector 对象的方法。 | ||
---|---|---|
语句 | 描述 | |
1 | vector<T> v1 |
v1 是一个空vector ,它潜在的元素是T 类型的,执行默认初始化。 |
2 | vector<T> v2(v1) |
v2 中包含有v1 所有元素的副本。 |
3 | vector<T> v2 = v1 |
等价于v2(v1) ,v2 中包含有v1 所有元素的副本。 |
4 | vector<T> v3(n, val) |
v3 包含了n 个重复的元素,每个元素的值都是val
|
5 | vector<T> v4(n) |
v4 包含了n 个重复地执行了值初始化的对象。 |
6 | vector<T> v5{a, b, c...} |
v5 包含了初始值个数的元素,每个元素被赋予相应的初始值。 |
7 | vector<T> v5={a, b, c...} |
等价于v5{a, b, c...} 。 |
需要注意的是,如果初始化时使用了花括号的形式,但是提供的值又不能用来列表初始化,就要考虑用这样的值来构造vector
对象了。例如,要想列表初始化一个含有string
对象的vector
对象,应该提供能赋给string
对象的初值。此时不难区分到底是要列表初始化还是用给定的容量值来构造vector
对象:
vector<string> v1{"hi"}; // 列表初始化:v1 有一个元素
vector<string> v2("hi"); // 错误:不能使用字符串字面值构建 vector 对象
vector<string> v3{10}; // v3 有 10 个默认初始化的元素
vector<string> v4{10, "hi"}; // v4 有 10 个值为 "hi" 的元素
确认无法执行列表初始化后,编译器会尝试用默认值初始化vector
对象。