摘要: 语法甜点11:非成员的begin和end 在C++ 03中,标准容器都提供了begin和end成员函数,但对于普通数组,则只能使用不同的写法。比如:1 vector v; 2 int a[100]; 3 sort(v.begin(), v.end()); 4 sort(a, a+sizeof(a)... 阅读全文
posted @ 2015-09-13 18:30 cpper-kaixuan 阅读(209) 评论(0) 推荐(0) 编辑
摘要: C++ 11中引入了许多简化编程工作的语法上的新特性,我们暂且美其名曰“语法甜点”。下面一一进行介绍。 语法甜点1:序列for循环 序列for循环是一种简化的for循环,可用于遍历一组序列,包括各种容器、string、数组、初始化列表以及由begin和end函数定义的序列。示例代码如下:1 vec... 阅读全文
posted @ 2015-09-13 18:16 cpper-kaixuan 阅读(207) 评论(0) 推荐(0) 编辑
摘要: C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存... 阅读全文
posted @ 2015-09-13 18:05 cpper-kaixuan 阅读(149) 评论(0) 推荐(0) 编辑
摘要: C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下: [函数对象参数] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体} 可以看到,Lambda主要分为五个部分:[函数对象参数]、(操作符重载函数参数)... 阅读全文
posted @ 2015-09-13 18:02 cpper-kaixuan 阅读(108) 评论(0) 推荐(0) 编辑
摘要: C++ 11中引入的tuple是一个N元组。它相当于有N个成员的结构体,只不过这个结构体的成员都是匿名的。tuple中有两个特殊的函数,一个是head(),用于获取第一个成员的值,另一个是tail(),用于获取剩下所有成员的值,tail()本身又是一个tuple。这样,如果我们想取tuple中第二... 阅读全文
posted @ 2015-09-13 17:58 cpper-kaixuan 阅读(930) 评论(0) 推荐(0) 编辑
摘要: bind是一组用于函数绑定的模板。在对某个函数进行绑定时,可以指定部分参数或全部参数,也可以不指定任何参数,还可以调整各个参数间的顺序。对于未指定的参数,可以使用占位符_1、_2、_3来表示。_1表示绑定后的函数的第1个参数,_2表示绑定后的函数的第2个参数,其他依次类推。 bind可以绑定到普通... 阅读全文
posted @ 2015-09-13 17:51 cpper-kaixuan 阅读(367) 评论(0) 推荐(0) 编辑
摘要: shared_ptr是一个引用计数智能指针,用于共享对象的所有权。它可以从一个裸指针、另一个shared_ptr、一个auto_ptr、或者一个weak_ptr构造。还可以传递第二个参数给shared_ptr的构造函数,它被称为删除器(deleter)。删除器用于处理共享资源的释放,这对于管理那些... 阅读全文
posted @ 2015-09-13 17:42 cpper-kaixuan 阅读(204) 评论(0) 推荐(0) 编辑
摘要: unique_ptr是一个独享所有权的智能指针,它提供了一种严格语义上的所有权,包括: 1、拥有它所指向的对象。 2、无法进行复制构造,也无法进行复制赋值操作。也就是说,我们无法得到指向同一个对象的两个unique_ptr。但是可以进行移动构造和移动赋值操作。 3、保存指向某个对象的指针,当它本身... 阅读全文
posted @ 2015-09-13 17:35 cpper-kaixuan 阅读(322) 评论(0) 推荐(0) 编辑
摘要: week_ptr是对对象的一种弱引用,它不会增加对象的引用计数。week_ptr和shared_ptr之间可以相互转换,shared_ptr可以直接赋值给week_ptr,week_ptr可通过调用lock函数来获得shared_ptr(如果对象已经被释放,则返回一个空的shared_ptr)。 ... 阅读全文
posted @ 2015-09-13 17:27 cpper-kaixuan 阅读(1142) 评论(0) 推荐(0) 编辑
摘要: 在C++ 11中,可以使用异步任务async和future配合来完成一些轻量级的并发编程工作。async使用比较简单,只需要传入要并发执行的函数即可。future用于占位,以获取并发执行的函数的结果;调用其get接口时,将等待并发任务结束,并返回结果。下面的代码演示了async和future的基本... 阅读全文
posted @ 2015-09-13 17:20 cpper-kaixuan 阅读(127) 评论(0) 推荐(0) 编辑