看侯捷翻译那本《STL源码剖析》中list内置sort的算法,书中注释说是quick sort,看了半天没看明白, template <class T, class Alloc> template <class T, class Alloc> void list<T, Alloc>::sort() ...
分类:
其他好文 时间:
2017-04-06 09:35:30
阅读次数:
264
1. STL的空间配置器 SGI STL设计了双层级配置器,第一级配置器直接使用malloc()、free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视为“足够大”,便调用第一级配置器;当配置区块小于128bytes时,视为“过小”,为降低额外负担,便采用复杂的mem ...
分类:
其他好文 时间:
2017-03-15 00:20:37
阅读次数:
226
侯捷老师在《STL源码剖析》中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘。如此一说,其重要性就不言而喻了。 之前已经介绍过迭代器,知道了不同的数据结构都有自己专属的迭代器,不同的迭代器也有不同的特性,由于算法的接口是统一的,通过迭代器的不同属性,算法 ...
分类:
其他好文 时间:
2017-03-07 15:59:54
阅读次数:
237
前言 以STL的实现角度而言,第一个需要介绍的就是空间配置器,因为整个STL的操作对象都存放在容器之中。 你完全可以实现一个直接向硬件存取空间的allocator。 下面介绍的是SGI STL提供的配置器,配置的对象,是内存。(以下内容来自《STL源码剖析》) 空间配置器的标准接口 根据STL的规范 ...
分类:
其他好文 时间:
2017-03-01 00:43:38
阅读次数:
315
好久没写了,简单水一下吧! 一个是最近没怎么刷题,圣诞,元旦,leetcode暂停的比赛两周,自己最近沉迷于打游戏,没有好好抓住时间。 其实最近看了一点书,是侯捷的 《stl源码剖析》,有一个问题是:vector内存只会增长,不会释放,那么怎么释放vector的内存呢? 参考这个:http://bl ...
分类:
编程语言 时间:
2017-01-12 08:42:32
阅读次数:
215
阅读基础: Foo *pf = new Foo; 执行了两个步骤: 1)::operator new 向系统申请内存. 2) 调用Foo::Foo()构造函数构造实例. ==> 申请内存,构造实例。 delete pf; delete; 执行了两个步骤: 1)调用Foo::~Foo()析构函数. 2 ...
分类:
其他好文 时间:
2016-12-27 00:16:00
阅读次数:
189
仿函数(functors)其实就是重载了operator()的对象。 下面简单先看看它的一个例子: 1 #include <iostream> 2 using namespace std; 3 4 template<typename T> 5 struct m_plus 6 { 7 T operat ...
分类:
其他好文 时间:
2016-10-31 13:28:28
阅读次数:
263
STL中算法是基于迭代器来实现的。 有了容器中迭代器的实现(对operator*、operator++等的重载),STL中大部分算法实现就显得很简单了。 先看一例关于find算法的实现: 1 template <class InputIterator, class T> 2 InputIterato ...
分类:
编程语言 时间:
2016-10-30 11:17:02
阅读次数:
347
deque是一个双向开口的容器,在头尾两端进行元素的插入跟删除操作都有理想的时间复杂度。 deque使用的是分段连续线性空间,它维护一个指针数组(T** map),其中每个指针指向一块连续线性空间。 (map左右两边一般留有剩余空间,用于前后插入元素,具体下面可以看到其实现) 根据上图,可以了解到d ...
分类:
其他好文 时间:
2016-10-27 12:44:24
阅读次数:
256