vector的数据安排以及操作方式,与array(c++自身提供的序列式容器)非常相似。两者唯一的差别在于空间的运用的灵活性。array是静态空间,一旦配置了将不能随意更改其大小,若要更改需要重新配置一块新的空间,如何将元素从旧址中一一搬迁,再释放原来的系统。而vector是动态空间,随着元素的加入 ...
分类:
其他好文 时间:
2019-10-19 18:53:13
阅读次数:
97
上节在学习第二级配置器时了解了第二级配置器通过内存池与自由链表来处理小区块内存的申请。但只是对其概念进行点到为止的认识,并未深入探究。这节就来学习一下自由链表的填充和内存池的内存分配机制。 refill()函数——重新填充自由链表 前情提要,从上节第二级配置器的源码中可以看到,在空间配置函数allo ...
分类:
其他好文 时间:
2019-10-13 17:08:52
阅读次数:
98
上节学习了内存配置后的对象构造行为和内存释放前的对象析构行为,在这一节来学习内存的配置与释放。 C++的内存配置基本操作是::operator new(),而释放基本操作是::operator delete()。这两个全局函数相当于C的malloc() 和free() 函数。而SGI正是以mallo ...
分类:
其他好文 时间:
2019-10-13 17:05:05
阅读次数:
78
启 算法,问题之解法也 算法好坏的衡量标准:时间和空间,单位是对数、一次、二次、三次等 算法中处理的数据,输入方式都是左闭又开,类型就迭代器, 如:[first, last) STL中提供了很多算法,我们只研究感兴趣的几种 算法,问题之解法也 算法好坏的衡量标准:时间和空间,单位是对数、一次、二次、 ...
分类:
编程语言 时间:
2019-09-23 19:49:28
阅读次数:
148
map与set底层都是调用的RBTree 首先看RBTree RBTree 红黑树的特性: 1.根节点为黑色 2.新增节点一定是红色 3.节点只有红色或黑色两种颜色 4.两个节点颜色不能同为红 5.任意一条路径上的黑色节点个数相同 红黑树的节点设计: 1.表示节点颜色的变量color 2.链接左子树 ...
分类:
其他好文 时间:
2019-09-16 09:33:55
阅读次数:
115
纯虚析构函数 理论上来说,将一个函数声明为纯虚函数后,这个类即变为抽象类。纯虚函数只提供接口,而不提供实现,但纯虚析构函数一定要提供定义。这是由C++特性决定的,编译器对派生类的析构函数会进行扩展,以静态调用的方式调用其每一个虚基类和上基类的析构函数,尽管是一个抽象类,但仍然要为这个纯虚析构提供实现 ...
分类:
其他好文 时间:
2019-09-13 01:29:55
阅读次数:
113
deque deque是一种双向开头的现行连续空间 但它与vector有差异: 1.deque可以在O(1)的复杂度下进行头端插入与移除,而vector的头端操作效率极差 2.deque没有capacity概念。deque随时可以拼接一段新的连续空间。只有像vector这种可能出现空间不足的容器才需 ...
分类:
其他好文 时间:
2019-09-12 10:28:11
阅读次数:
94
近段时间看了侯捷老师的《STL源码剖析》,看第一遍的时候一头雾水,反复多看几遍,似乎明白了一些。因此将学到的知识做一个记录,也算是记录自己的学习过程。本系列博客主要记录一些宏观理解性的东西,具体的代码实现还是要仔细品味原书。概览 STL即C++标准模板库,主要由六大部件组成,分别是:分配器、容器、迭... ...
分类:
其他好文 时间:
2019-08-27 15:39:28
阅读次数:
104
SLT简介 STL(Standard Template Library),即标准模板库,是一个高效的C++程序库。包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。其核心思想就是泛化编程(generic program ...
分类:
其他好文 时间:
2019-01-07 21:13:19
阅读次数:
195
一、STL简介 STL提供六大组件,彼此可以组合套用: 二、关于容器的一些问题 2.1 当vector的内存用完了,它是如何动态扩展内存的?它是怎么释放内存的?用clear可以释放掉内存吗?是不是线程安全的? 2.2 map是怎么实现的?查找的复杂度是多少?能不能边遍历边插入? 红黑树和散列 O(l ...
分类:
其他好文 时间:
2018-11-06 22:23:06
阅读次数:
196