STL 源码解析

一开始一直无法理解STL中的内存分析,一天很困,翻开了侯捷的STL源码解析,阅读一二,这是一针见血,字字珠玑,解开了一个又一个迷惑~

简单记录,和大家分享一下

1) 空间适配器

template <class T1,class T2>

inline void _construct(T1 *p,const T2 &value) {

  new (p) T1(value);  // placement new, and allocate object on the requested memory 

}

时间: 2024-12-17 20:15:40

STL 源码解析的相关文章

《STL源码解析》读书笔记之序列式容器(2)

1.deque deque和vector的最大差异在于deque允许在常数时间内对首端进行元素的插入和删除操作.而且deque没有容量的观念,因为它是动态地以分段连续空间组合而成的,随时可以增加一段新的空间并链接起来.像vector那样因旧空间不足而重新配置一块更大空间的情况在deque里是不会发生的.虽然deque也提供Random Access Iterator,但它的迭代器并不是普通指针,这影响了很多操作的效率. (1)deque的map deque在逻辑上是连续空间,但实际上它是由一段一

STL源码解析之bind1st和bind2nd

首先我们先来了解一下一元函数和二元函数.一元函数数学上一般形式表示为 z = f(x),只有一个变量x.二元函数数学上一般形式表示为 z = f(x,y),存在两个变量,分别是x和y. STL中为了描述一元函数和二元函数,定义了两个结构体来描述.如下: //一元函数结构 template <class Arg, class Result> struct unary_function { typedef Arg argument_type; //参数类型,可以理解为x对应的类型 typedef

《STL源码解析》读书笔记之allocator(1)

内存配置器allocator是stl中的一个模板类,它提供类型化的内存分配以及释放操作.SGI STL的配置器与众不同,其名称是alloc而非allocator,而且不接受任何参数(如vector<int,std::alloc>).每个SGI STL容器采用的默认内存配置其都是alloc而不是allocator. 首先介绍allocator.SGI中虽然有allocator的定义,但基本上从不用它,原因是效率不高.它仅仅是把c++的new和delete稍微做了一点封装而已(allocate函数

《STL源码解析》读书笔记之序列式容器(1)

1.vector vector的数据安排以及操作方式与array非常相似,两者的唯一差别在于空间的运用的灵活性.array是静态空间,一旦配置了就不能再改变.vector是动态空间,随着元素的加入它的内部机制会自行扩充空间以容纳新元素. (1)vector的迭代器 因为vector维护的是一个连续线性空间,所以无论其元素型别为何,普通指针都可以作为vector的迭代器.因为vector迭代器所执行的操作行为,如operator*,operator->,operator++,operator--,

STL sort 源码解析

前言 --本文整理自<STL源码解析> 虽然源码解析的代码比较老但是核心思想并没有太多变化并且直接看源码有太多细节我又看不懂最新的. 简介 sort接受两个RandomAccessIterators(随机存储迭代器),然后将区间内的所有元素以渐増的方式由小到大重新排列,第二个版本允许用户指定一个仿函数作为排序标准,STL所有关系型容器都拥有自动排序功能,不需要sort,stack,queue,priority-queue都有特别出入口,不允许排序,剩下vector,deque和list,前两者

Python2 基本数据结构源码解析

Python2 基本数据结构源码解析 Contents 0x00. Preface 0x01. PyObject 0x01. PyIntObject 0x02. PyFloatObject 0x04. PyStringObject 0x05. PyListObject 0x06. PyDictObject 0x07. PyLongObject 0x00. Preface 一切皆对象,这是Python很重要的一个思想之一,虽然在语法解析上有些细节还是不够完全对象化,但在底层源码里,这个思想还是贯穿

ChrisRenke/DrawerArrowDrawable源码解析

转载请注明出处http://blog.csdn.net/crazy__chen/article/details/46334843 源码下载地址http://download.csdn.net/detail/kangaroo835127729/8765757 这次解析的控件DrawerArrowDrawable是一款侧拉抽屉效果的控件,在很多应用上我们都可以看到(例如知乎),控件的github地址为https://github.com/ChrisRenke/DrawerArrowDrawable

五.jQuery源码解析之jQuery.extend(),jQuery.fn.extend()

给jQuery做过扩展或者制作过jQuery插件的人这两个方法东西可能不陌生.jQuery.extend([deep],target,object1,,object2...[objectN]) jQuery.fn.extend([deep],target,object1,,object2...[objectN])这两个属性都是用于合并两个或多个对象的属性到target对象.deep是布尔值,表示是否进行深度合并,默认是false,不执行深度合并.通过这种方式可以在jQuery或jQuery.fn

eclipse中导入jdk源码、SpringMVC注解@RequestParam、SpringMVC文件上传源码解析、ajax上传excel文件

eclipse中导入jdk源码:http://blog.csdn.net/evolly/article/details/18403321, http://www.codingwhy.com/view/799.html. ------------------------------- SpringMVC注解@RequestParam:http://825635381.iteye.com/blog/2196911. --------------------------- SpringMVC文件上传源