C++ vector 列表初始化

vector<int> vl(10);      //v1有10 个元素,每个的值都是0
vector<int> v2{10};      //v2有1个元素,该元素的值是 10
vector<int> v3(101);   //v3有10个元素,每个的值都是1
vector<int> v4{101};   //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 @   double64  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-09-18 中介者模式
2022-09-18 状态模式
2022-09-18 观察者模式
2022-09-18 适配器模式
2021-09-18 C# 集合之 ArrayList
2021-09-18 英语|你能明白我的意思吗
点击右上角即可分享
微信分享提示