C++11新特性小结

1 匿名函数lambda
[函数对象参数] (操作符重载函数参数)->返回值类型{函数体}
[]中是全局变量名, 如为=则为可获取所有全局变量(作为副本), 如为&则可获得所有全局变量(作为引用)
()中为传入参数
可与for_each()搭配用更简单的代码遍历容器
for_each(beg, end, fun)其中fun为函数指针, 可以为lambda匿名函数;
匿名函数使得我们不必再为那些局部的小函数绞尽脑汁想函数名了, 一大解放
比如:
struct node {
	int key;
	int save;
};
sort(vec.begin(), vec.end(), [](const node &item1, const node &item2)->bool{return item1.key < item2.key;});
auto cmp = [](const node &item1, const node &item2)->bool{
	return item1.key < item2.key;
};
sort(vec.begin(), vec.end(), cmp);

2 unordered_map unordered_set
类似于hashtable, 很方便的hash表; java中是根据链地址法处理冲突, 不知道C++是如何处理的;(ps: 曾看到过, 任何数据列都可以找到一个完美的hash函数);

3 auto关键字
自动判别类型, 必须初始化, 比如auto ix = 1;就自动推导ix为int类型, 在模板中也有作用;
注意: auto不会影响可执行文件的运行速度, 但在编译时会消耗更多的时间, 编译器需要根据赋值判断其数据类型;

4 decltype关键字
取得已有变量的类型
比如:
decltype(x) y = x;//y的类型与x相同

5 nullptr
因为原本的NULL有二义性, 即是int值0也是空指针, nullptr只能作为空指针

6 序列for循环
类似python里的xx in list
如:
map<string, int> mp{
	{"John", 1},
	{"Mike", 2},
	{"Peter", 3}
};
for (auto person : mp)
	cout << person.first << ':' << person.second << endl;

7 变长参数模板tuple
auto newTuple = make_tuple("John", 2.5, 1, {2, 3, 4});
由此可以更方便地存储组合数据

8 新的初始化方法
int arr[3] {1,2,3};
vector<int> iv{1,2,3};
map<int, string> {{1,"a"}, {2, "b"}, {3, "c"}};
string str{"abc"};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值