- 博客(14)
- 资源 (24)
- 收藏
- 关注
原创 C++11新特性(43)- 智能指针weak_ptr
弱指针weak_ptr看起来更像shared_ptr的附属品,它从shared_ptr衍生,但不会控制所指向对象的生命周期。weak_ptr的弱就弱在这里。构建一共有三种形式,都非常简单,直接看代码。执行结果:虽然根据shared_ptr构造了两个weak_ptr,引用计数仍然为1。赋值一样的简单。输出结果:虽然根据shared_pt为两个weak_ptr赋值,引用计数仍然为1。使用C++11标准...
2018-06-27 20:12:46 519 3
原创 C++11新特性(42)- 智能指针unique_ptr
软件开发中有很多处理是对称的,例如打开文件和关闭文件,申请内存和释放内存,压栈和出栈等。同样的道理分享也存在对称处理:独占。与之相应的智能指针就是unique_prt。它同样可以自动管理内存,只是这块内存不和其他的unique_ptr分享。初始化如果观察unique_ptr的构造函数声明会发现,unique_ptr支持的构造函数和shared_ptr相差无几,这里直接举例。初始化空unique_p...
2018-06-26 20:09:04 454
原创 C++11新特性(41)- 智能指针shared_ptr(3)
初始化(构造函数)之后,今天继续说明赋值(赋值运算符)。在实现时构造函数和赋值运算符的区别很明显,一个是构造函数,一个是运算符重载。但是在使用时有时还是不大好区分,例如一个赋值表达式有时也会调用构造函数等。本文的内容还是来自下面的网站:http://www.cplusplus.com/reference/memory/shared_ptr/operator=/拷贝赋值函数原型:shared_ptr...
2018-06-25 20:29:44 621
原创 C++11新特性(40)- 智能指针shared_ptr(2)
本文说明shared_ptr的初始化。shared_prt的本身是一个类,所以它的初始化实际上就是调用shared_ptr类的构造函数。通过分析shared_ptr的构造函数,就可以准确把握shared_ptr初始化的方法。default构造函数函数原型:constexpr shared_ptr() noexcept;说明:声明空shared_ptr。代码示例:由空指针构造函数原型:constex...
2018-06-21 20:32:08 801 2
原创 C++11新特性(39)- 智能指针shared_ptr(1)
C/C++被认为是最难掌握的高级语言,其原因除了指针以外就是内存管理。长期以来,内存的取得和释放方面的问题成为无数程序员的噩梦。为了解决这个问题,C++11标准库引入了两种智能指针,动作类似于常规指针,同时具备在合适的时机自动释放内存的功能。当然了,智能指针并不是一个新想法,只是到了C++11才被纳入到标准库。今天先说明shared_ptr。基本原理shared_ptr在内部维护一个相当于引用计数...
2018-06-20 20:31:38 1306
原创 C++11新特性(38)- 无序关联容器
C++11之前的关联容器在C++11之前的关联容器一共有四种。首先是两种最基本的类型:map和set。map中保存的是关键字-值的组合,而set中只保存关键字。map和set中的关键字不允许重复,一旦相同的关键字重新写入,则原来的内容被覆盖。如果希望关键字可以重复,可以使用multimap和multiset。用图表表示就是下面这样。由于这些关联容器的存储位置是根据比较运算符决定的,所以也成为有序关...
2018-06-19 20:42:37 1136 1
原创 C++11新特性(37)- 关联容器的列表初始化
什么是关联容器关联容器(associative container)并不是C++11才有的概念,之所以叫关联容器是因为容器中的元素是通过关键字来保存和访问的,与之相对的是顺序容器(sequence container),其中的元素是通过它们在容器的位置来保存和访问的。顺序容器的例子 vector<string> name{"zhao", "qian", "sun...
2018-06-14 20:28:48 647
原创 C++11新特性(36)- 参数绑定
lambda表达式的缺点还记得当初引入lambda表达式的原因么?向算法传递谓词时,由于一般的函数无法传递参数以外的信息,函数对象又比较麻烦,所以引入了lambda表达式。但是lambda表达式也有缺点:在类似功能多次使用的时候,每次定义lambada表达式也会比较麻烦。本文介绍另一种方式:参数绑定。标准库bind函数继续用lambda表达式中用过的例子,如果希望找到第一个长度小于2的string...
2018-06-13 20:21:10 513 1
原创 C++11新特性(35)- lambda表达式(6)
为什么是lambda?讲了这么多天的lambda表达式,有一个很基本的问题没有回答:为什么叫lambda表达式呢?首先这个lambda就是罗马字母λ,lambda表达式即λ表达式。数学上有一个概念叫λ演算,其中的一个内容就是λ表达式。考虑普通的数学函数表示方法:f(x) = 2x + 1按照λ表达式的规则,可以写成:λx.(2x+1)这个表达式可以读成“对于参数x,2x+1。这里的Lambda,λ...
2018-06-12 19:33:03 491
原创 C++11新特性(34)- lambda表达式(5)
可变lambda假设有如下vector,保存的内容是学生的考试成绩:vector<int> score{45, 70, 56, 86, 28, 60, 90};可以用以下代码来寻找第一个及格成绩:find_if(score.begin(), score.end(), [](int v){return (v >=60);});如果需要找到第n个及格成绩,很自然地会考...
2018-06-11 22:30:22 344
原创 C++11新特性(33)- lambda表达式(4)
可以认为lambda表达式取得信息有两种方式,或者说两个时机:一个是参数列表,其内容是在表达式被调用时决定;另一个捕获列表,其内容是在是表达式被创建的时候决定,本文讨论捕获列表。值捕获先看如下代码:int factor = 2;auto multiply = [factor](int value) {return factor * value;};factor = 4...
2018-06-08 20:50:56 544
原创 C++11新特性(32)- lambda表达式(3)
函数对象考虑下面的代码:bool istarget(const string& s){ return s.size() < 2;}vector<string> v{"This","is", "a", "predicate", "."};auto found = find_if(v.begin(), v.end(), istarget);cout
2018-06-06 19:16:50 564
原创 C++11新特性(31)- lambda表达式(2)
可调用对象对于一个表达式e,如果可以编写代码以e(args)的形式执行它,就可以说e是可调用的。例如下面的函数:int add(int a, int b);可以这样编写代码:int ret = add(1, 2);按照前面提到的原则,就可以说add是可调用的。到C++98为止,可调用对象有函数,函数指针,函数对象等。正式介绍一下C++11之后引入的lambda表达式也是一种可调用对象,其标准形式如...
2018-06-05 21:00:51 510
原创 C++11新特性(30)- lambda表达式(1)
泛型算法中的定制操作很多算法都会比较输入序列中的元素,通过定制比较动作,可以控制算法按照编程者的意图工作。本文以string排序为例进行说明,首先是缺省的排序动作: vector<string> v{"This","is", "a", "predicate", "."};sort(v.begin(), v.end());for(auto s:v){ cout <
2018-06-04 21:23:03 782 3
Aduino UNO D1 R32 硬件包
2020-03-15
[Android应用开发记录-字幕播放器(5)完善]附属工程,源码
2011-09-07
Android应用开发记录-字幕播放器(5)完善附带工程,源码
2011-09-07
LyricPlayer for Android 2.1
2011-09-03
Android应用开发记录-字幕播放器(4)完成
2011-08-28
Android下的原创小游戏-九宫格
2011-08-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人