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
SGI STL中list是使用环状双向链表实现的。它的结点结构定义如下: 1 template <class T> 2 struct __list_node { 3 typedef void* void_pointer; 4 void_pointer next; 5 void_pointer pre ...
分类:
其他好文 时间:
2016-10-26 13:24:34
阅读次数:
204
在SGI STL中,vector使用的是连续的内存空间,迭代器使用普通指针来实现。 因为使用的是连续的内存空间,在vector容量不足的时候会直接分配一块新的内存,把原来的元素copy进去,回收原来的内存空间。 因此在vector扩容的时候,原来的所有迭代器都会失效。 vector的实现基本都是围绕 ...
分类:
其他好文 时间:
2016-10-24 09:40:57
阅读次数:
238
在STL中,容器跟算法是分开设计的,算法是通过迭代器来对容器进行操作的。 在算法运用迭代器的时候,可能会用到其相应的型别,例如返回值为容器中元素的型别,又或者说根据迭代器的类型来选择更好的算法等等。 为了实现这一点,还有为了兼容内置型别的迭代器(vector迭代器直接使用原生pointer),STL ...
分类:
其他好文 时间:
2016-10-23 09:44:02
阅读次数:
212
前言 在STL中,容器的定义中都带一个模板参数,如vector 其中第二个参数就是该容器使用的空间配置器,其中缺省使用STL已经实现的空间配置器(alloc), 该配置器使用malloc/free等为vector分配内存。 缺省的空间配置器 alloc定义了两级的空间配置器,第一级是对malloc/ ...
分类:
其他好文 时间:
2016-10-22 17:11:50
阅读次数:
213
STL有6大组件,阅读《STL源码剖析》后,对于我来说主要收货为:内存分配器、迭代器、仿函数。特别是迭代器章节收货最多,其中重中之重为traits机制的运用。 traits技法——STL的入门钥匙 首先必须清楚模板的参数推导机制,例如: ...
分类:
其他好文 时间:
2016-10-20 14:28:42
阅读次数:
144
《Inside UE4》目录 InsideUE4 UE4无疑是非常优秀的世界上最顶尖的引擎之一,性能和效果都非常出众,编辑器工作流也非常的出色,更难得宝贵的是完全的开源让我们有机会去从中吸取营养,学习世界上第一流游戏引擎的架构思想。 本系列教程《Inside UE4》,希望从最最底层的C++源码剖析 ...
分类:
其他好文 时间:
2016-10-08 16:04:43
阅读次数:
342