Bootstrap

《STL源码剖析》笔记记录

《STL源码剖析》笔记记录

2.空间适配器(allocator)

分配的是空间,而不一定是内存

为了精密分⼯,STL allocator 决定将这两个阶段操作区分开来。
1、对象构造由 ::construct() 负责;对象释放由 ::destroy() 负责。
2、内存配置由 alloc::allocate() 负责;内存释放由 alloc::deallocate() 负责;

2.2 具备次配置力的SGI空间配置器

关键概念
1、第一级配置器 > 128byte 直接申请,malloc, free
2、第二级配置器
内存数组 freelist
内存池

2.3 内存基本处理工具

2.3.1 uninitialized_copy

2.3.2 uninitialized_fill

2.3.3 uninitialized_fill_n

3.迭代器概念以及traits编程方法

3.4 Traits 编程技巧

Traits 可以理解为一种类型的 “特性” 或 “属性” 的封装。通过 Traits 类,我们可以在编译时根据不同的类型获取其相关的信息,如类型的大小、是否为指针类型、是否为可拷贝类型等,或者执行与该类型相关的特定操作。Traits 编程技巧主要利用模板特化来实现,针对不同的类型提供不同的实现。

作用
实现泛型算法的优化
适配不同容器类型,根据元素类型选择合适操作。

3.4.1 相应型别

value_type :迭代器所指对象的类型,原⽣指针也是⼀种迭代器,对于原⽣指针 int*,
int 即为指针所指对象的类型,也就是所谓的 value_type 。

difference_type : ⽤来表示两个迭代器之间的距离,对于原⽣指针,STL 以 C++ 内
建的 ptrdiff_t 作为原⽣指针的 difference_type。

reference_type : &。

pointer_type : 就是相应的指针类型,对于指针来说,最常⽤的功能就是 operator* 和
operator-> 两个运算符。

iterator_category: 作⽤是标识迭代器的移动特性和可以对迭代器执⾏的操作,从
iterator_category 上,可将迭代器分为 Input Iterator、Output Iterator、Forward
Iterator、Bidirectional Iterator、Random Access Iterator 五类,这样分可以尽可能地提
⾼效率。

4. 序列式容器

;