随笔分类 -  C++

摘要:1、 C++98/03初始化 我们先来总结一下C++98/03的各种不同的初始化情况: 这些不同的初始化方法都有各自的适用范围和方法,但是种类繁多的方法却没有一种可以通用的。所以C++11提出了初始化列表的方法来解决通用问题。 2、 统一初始化方法 其实C++98/03中已经存在初始化列表的方法,只 阅读全文
posted @ 2017-10-10 22:57 Memset 阅读(3872) 评论(1) 推荐(0)
摘要:1、 右尖括号 我们在C++98/03中使用泛型编程的时候,经常遇到“>>”被当作右移操作符,而不是模板参数的结尾。假如我们有如下代码: 使用C++98/03的时候会出现如下错误: 意思就是vector<Foo<int>>的写法不支持,我们不得不改成vector<Foo<int> >,”>>”之间有 阅读全文
posted @ 2017-10-10 22:40 Memset 阅读(1068) 评论(0) 推荐(0)
摘要:1、 概述 C++11里面引入了auto和decltype关键字来实现类型推导,通过这两个关键字不仅能方便的获取复杂的类型,还能简化书写,提高编码效率。 2、 auto 2.1 auto关键字的新定义 auto关键字并不是一个全新的关键字,早在旧标准中就已经有定义:“具有自动储存期的局部变量”,不过 阅读全文
posted @ 2017-10-10 22:29 Memset 阅读(1284) 评论(2) 推荐(1)
摘要:1、定义 class queue<>实作为一个queue(也成为FIFO,先进先出)。可以使用push()将任意数量的元素置入queue中,也可以使用pop()将元素以其插入顺序从容器中移除。 queque有两个参数,第一个参数是元素类型,带有默认值的第二个参数用来定义queuen内部存放元素用的实 阅读全文
posted @ 2017-06-11 16:34 Memset 阅读(3918) 评论(0) 推荐(0)
摘要:1、定义 class stack<> 实作出一个stack(也成为LIFO,后进先出),你可以使用push()将任意数量的元素置入stack中,也可以使用pop()将元素依次插入次序反序从容器移除(即后进先出)。 在<stack>中,class stack定义如下: 第一个template参数代表元 阅读全文
posted @ 2017-06-11 16:32 Memset 阅读(12375) 评论(0) 推荐(0)
摘要:c++提供了各具特长的容器,那么我们该如何选择最佳的容器? 缺省状态下应该选择vector,因为vector内部结构最简单,并允许随机存取,所以数据的存取十分方便,数据的处理也快。 如果经常要在头部和尾部安插和移动元素,应该采用deque,如果希望元素被移除时,容器能够自动缩减内存,也应该使用deq 阅读全文
posted @ 2017-06-11 16:29 Memset 阅读(1019) 评论(0) 推荐(1)
摘要:1、结构 Map和multimap将key/value pair(键值/实值 队组)当作元素,进行管理。他们根据key的排序准则将元素排序。multimap允许重复元素,map不允许。 元素要求: key/value必须具有assigned(可赋值)和copyable(可复制的)性质。 对于排序而言 阅读全文
posted @ 2017-06-11 16:26 Memset 阅读(7109) 评论(2) 推荐(1)
摘要:1、结构 set和multiset会根据特定的排序原则将元素排序。两者不同之处在于,multisets允许元素重复,而set不允许重复。 只要是assignable、copyable、comparable(根据某个排序准则)的型别T,都可以成为set或者multisets的元素。如果没有特别的排序原 阅读全文
posted @ 2017-06-11 16:08 Memset 阅读(39888) 评论(0) 推荐(20)
摘要:1、结构 list使用一个double linked list(双向链表)来管理元素。 2、 list 能力 list内部结构和vector或deque截然不同,所以与他们的区别: list不支持随机存取,需要存取某个元素,需要遍历之前所有的元素,是很缓慢的行为。 任何位置上(不止是两端)安插和删除 阅读全文
posted @ 2017-06-11 15:48 Memset 阅读(1833) 评论(0) 推荐(0)
摘要:1、结构 容器deque和vector非常相似,也是采用动态数组来管理元素,提供随机存取,有着和vector几乎一样的接口,不同的是deque的动态数组头尾都开放,因此可以在头尾都可以进行快速的安插和删除。 为了获取这种能力,deque通常实作为一组独立区块,第一区块朝某方向扩展,最后一区块朝另一方 阅读全文
posted @ 2017-06-11 15:33 Memset 阅读(670) 评论(0) 推荐(0)
摘要:1、结构 vector模塑出一个动态数组,因此,它本身是“将元素置于动态数组中加以管理”的一个抽象概念。vector将其元素复制到内部的dynamic array中。元素之间总存在某种顺序,所以vector是一种有序群集。vector支持随机存取,因此只要知道位置,可以在常数时间内存取任何一个元素。 阅读全文
posted @ 2017-06-11 15:17 Memset 阅读(3342) 评论(0) 推荐(2)
摘要:1、容器的共通能力 1、 所有的容器都是“value”语意,而不是“reference”语意。容器进行元素的安插操作时,内部实施的都是拷贝操作,置于容器内。因此STL容器的每个元素都必须能被拷贝。如果你打算存放的对象不具有public copy构造函数,或者你要的不是副本(例如你要的是被多个容器共同 阅读全文
posted @ 2017-06-11 14:57 Memset 阅读(554) 评论(0) 推荐(0)
摘要:执行期语意学,即在程序执行时,编译器产生额外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行。 1、对象的构造和析构 对于类对象的构造,一般在定义之后则开始内部的构造过程。一个区段可能有多个return离开点,所以可能导致一些对象创建后,没有用就需要释放,这就造成了很多 阅读全文
posted @ 2017-04-23 22:03 Memset 阅读(257) 评论(0) 推荐(0)
摘要:1、构造语义学 C++的构造函数可能内带大量的隐藏码,因为编译器会扩充每一个构造函数,扩充程度视 class 的继承体系而定。一般而言编译器所做的扩充操作大约如下: 如果该类被列于成员初始化列表中,那么如果有任何明确指定的参数,都应该传递过去。若没有列于列表之中,虚基类的一个默认构造函数被调用(有的 阅读全文
posted @ 2017-04-23 21:54 Memset 阅读(357) 评论(0) 推荐(0)
摘要:1、Member的各种调用方式 1.1 Nonstatic Member Functions 实际上编译器是将member function被内化为nonmember的形式,经过下面转化步骤: 1.给函数添加额外参数——this。 2.将对每一个nonstaitc data member的存取操作改 阅读全文
posted @ 2017-04-23 21:13 Memset 阅读(295) 评论(0) 推荐(0)
摘要:1、 Data Member 的布局 同一个Access Section(private, public等)中,data member的顺序按照声明顺序排列,但是没有规定需要连续排序。同时编译器可能会安插一些内部的data member(比如vptr),用来支持整个对象模型。 不同Access Se 阅读全文
posted @ 2017-04-23 20:58 Memset 阅读(371) 评论(0) 推荐(0)
摘要:1、Default Constructor 当编译器需要的时候,default constructor会被合成出来,只执行编译器所需要的任务(将members适当初始化)。 1.1 带有 Default Constructor 的Member Class Object 编译器的出来是:如果一个cla 阅读全文
posted @ 2017-04-23 20:42 Memset 阅读(319) 评论(0) 推荐(0)
摘要:1、C/C++区别 C++较之C的最大区别,无疑在于面向对象,C程序中程序性地使用全局数据。而C++采用ADT(abstract data tpye)或class hierarchy的数据封装。类相较于C的struct不仅只包含了数据,同时还包括了对于数据的操作。在语言层面上C++带来了很多面向对象 阅读全文
posted @ 2017-04-23 20:26 Memset 阅读(312) 评论(0) 推荐(0)
摘要:在c++98中,智能指针通过一个模板“auto_ptr”来实现,auto_ptr以对象的方式来管理堆分配的内存,在适当的时间(比如析构),释放所获得的内存。这种内存管理的方式只需要程序员将new操作返回的指针作为auto_ptr的初始值即可,程序员不能显式的调用delete。如 auto_ptr(n 阅读全文
posted @ 2016-06-01 19:17 Memset 阅读(5673) 评论(0) 推荐(0)
摘要:我们通常在写for循环 的时候,要实现变量 i 的自增 1 ;往往会在i++ 和++i中随便挑一种写,对于i++和++i的理解,我们往往停留在返回的值的不同,其实i++与++i在实现效率上也有一定的不同(不考虑编译器优化的原因)。 ++i的实现效率更高 解释如下: i++ (在C++中) 在实现的时 阅读全文
posted @ 2015-11-20 17:14 Memset 阅读(538) 评论(0) 推荐(0)