C++ vector 列表初始化

vector<int> vl(10);      //v1有10 个元素,每个的值都是0
vector<int> v2{10};      //v2有1个元素,该元素的值是 10
vector<int> v3(10,1);   //v3有10个元素,每个的值都是1
vector<int> v4{10,1};   //v4有2个元素,值分别是10和1

如果初始化时使用了花括号的形式但是提供的值又不能用来列表初始化,就要考虑用这样的值来构造 vector 对象了。例如,要想列表初始化一个含有 string 对象的 vector 对象,应该提供能赋给 string 对象的初值。此时不难区分到底是要列表初始化 vector 对象的元素还是用给定的容量值来构造 vector 对象:

vector<string> v5{"hi"};     //列表初始化:v5 有一个元素
vector<string> v6("hi");     //错误:不能使用字符串字面值构建 vector 对象
vector<string> v7{10};       //v7有 10 个默认初始化的元素
vector<string> v8{10,"hi"}; //v8有10个值为"hi"的元素

尽管在上面的例子中除了第二条语句之外都用了花括号,但其实只有 v5 是列表初始化。要想列表初始化 vector 对象,花括号里的值必须与元素类型相同。显然不能用 int 初始化 string 对象,所以 v7 和 v8 提供的值不能作为元素的初始值。确认无法执行列表初始化后,编译器会尝试用默认值初始化 vector 对象。




《C++ Primer》 P90

posted @ 2024-09-18 17:41  double64  阅读(54)  评论(0编辑  收藏  举报