什么是列表初始化

使用一个花括号来初始化变量,表现形式如下:

std::vector<int>a{1,2,3,4,5};

或者

std::vector<int>a = {1,2,3,4,5};

这里用到了一个新的类型,即initializer_list,包含在标准库头文件中。

优点

  1. 在C++11以前,如果要初始化一个vector,需要这样做
std::vector<int>a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);

很明显,使用列表初始化使得代码量少了很多,也更加的简洁优雅。

2. 这种方式不仅仅可以用在STL中,也可以用于一般的内置类型。

int c{3};
int c = {3};

乍一看,这样做没什么优点,并没有变得更简洁,甚至还要多写两个花括号。但在CppCoreGuideline中,非常推荐这种写法。原因是有一个类型检查

int c = 3.3; //这里会进行默认类型转换
int b = {3.3}; //这里编译器会给出警告(也有可能是错误)

理论上,这样的代码更加健壮。

自定义类型使用initializer_list

c++11也提供了方法,让用户可以在自定义类型(一般指类)中使用初始化列表。

#include <iostream>
#include <vector> class Num
{
private:
std::vector<int> vv;
public: Num(const std::initializer_list<int> &v)
{
for (auto a : v)
{
vv.push_back(a);
}
} void PrintNum(void)
{
for (auto v : vv)
{
std::cout << v << " ";
}
std::cout << std::endl;
}
}; int main(int argc, char **argv)
{
Num n{1, 2, 3, 4};
n.PrintNum(); return 0;
}

实现方法,简单来说,就是加入initializer_list类型来实现构造函数,在新建对象时,就可以使用列表初始化的方式了。

一个特殊用法

在使用python的时候,有时候会这样操作

for i in [1,2,3]:
print(i)

看起来很简洁优雅,c++其实也有这种操作

#include <iostream>

int main(int argc, char **argv)
{
for(auto n : {1,2,3,4,5,6})
{
std::cout<<n<<std::endl;
} }

最新文章

  1. java: web应用中不经意的内存泄露
  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts
  3. Winform(C#.NET)自动更新组件的使用及部分功能实现
  4. 【Swift学习】Swift编程之旅(一)
  5. uniq 重复行统计
  6. 透过现象看现象(SQL501N错误处理)
  7. excel上传与下载
  8. elipse+pydev+python开发arcgis脚本程序
  9. php程序备份还原mysql数据库
  10. MyEclipse中Web项目的发布和运行
  11. Android网络传输中必用的两个加密算法:MD5 和 RSA
  12. -_-#【Backbone】Router
  13. 经典shell面试题整理
  14. linux下java调用.so动态库方法2: JNA
  15. 利用iptables将本地的80端口请求转发到8080,当前主机ip为192.168.1.1,命令怎么写?
  16. 1.js编程风格。 --- 编写可维护的javascript
  17. 理解ROS的节点(NODE)
  18. Hive UDAF开发之同时计算最大值与最小值
  19. Luogu P5285 [十二省联考2019]骗分过样例
  20. js控制全屏及退出全屏

热门文章

  1. jQuery实现当按下回车键时绑定点击事件
  2. php单一入口和多入口模式详细讲解
  3. BZOJ1856 [SCOI2010]生成字符串 【组合数】
  4. 群论 - Group Theory
  5. Microsoft发布新一代主机:Xbox One
  6. node(总结)--整体
  7. luogu 1004 方格取数 dp
  8. 转 Perl函数返回值用法指导
  9. Scrapy学习-13-使用DownloaderMiddleware设置IP代理池及IP变换
  10. LeetCode OJ--Best Time to Buy and Sell Stock II