0. 背景
STL是什么?
STL(Standard Template Library)标准模板库的英文缩写,包含有计算机科学领域常用的基本数据结构和基本算法。
STL与C++标准库的关系
版本
No. | 版本 | 作者 | 是否开源 | 特点 |
---|---|---|---|---|
1 | HP STL | [美]Alexandar Stepanov/[美]Meng Lee | 是 | 第一个实现版本 |
2 | SGI STL | [美]Alexandar Stepanov | 是 | GCC使用版本,源码可读性高 |
3 | STLport | [俄]Boris Fomitchev | 是 | 适用于VC++和C++ Builder等多种编译器,跨平台可移植 |
4 | P.J.Plauger STL | [美]P.J.Plauger | 否 | Visual C++使用版本,性能教高 |
5 | Rouge Wave STL | Rouge Wave公司 | 否 | Borland C++ 5.0-使用版本 |
参考:《STL源码剖析》侯捷
1. STL 的组成
STL Components
No. | Component | 部件 | 作用 | |
---|---|---|---|---|
1 | Container | 容器 | 存储数据 | |
2 | Iterator | 迭代器 | 遍历容器数据 | |
3 | Adaper | 适配器(配接器) | 容器转换 | |
4 | Algorithm | 算法 | 通用算法 | |
5 | Function Object/Functor | 函数对象/仿函数(函数子) | ||
6 | Allocator | 分配器(配置器) | 分配释放内存 |
程序 = 数据结构(容器) + 算法
迭代器是容器与算法的桥梁
2. 容器分类
分类原则:结构
No. | Container | 容器 | e.g. |
---|---|---|---|
1 | Sequence Container | 顺序容器(序列容器) |
vector ,list ,deque
|
2 | Associative Container | 关联容器 |
map ,``multimap, set, multiset` |
3 | Container Adapter | 容器适配器 |
stack ,queue ,priority_queue
|
3. 迭代器分类
- 分类原则:访问方式
No. | Iterator | 迭代器 | 能力 | e.g. |
---|---|---|---|---|
1 | Input Iterator | 输入迭代器 | 向前读取能力 | istream_iterator |
2 | Output Iterator | 输出迭代器 | 向前写入能力 | ostream_iterator |
3 | Forward Iterator | 向前迭代器 | 向前读取写入能力 | - |
4 | Biredirectional Iterator | 双向迭代器 | 双向读取写入能力 |
list ,map ,set 的iterator
|
5 | Random-Access Iterator | 随机访问迭代器 | 随机读取写入能力 |
string ,vector ,deque 的iterator
|
- 分类原则:操作类型
No. | Iterator | 迭代器 | e.g. |
---|---|---|---|
1 | iostream Iteractor |
iostream 迭代器 |
istream_iteractor ,ostream_iteractor
|
2 | Insert Iteractor | 插入迭代器 |
back_inserter ,front_inserter ,inserter
|
3 | Reverse Iteractor | 反向迭代器 | reverse_iteractor |
3. 适配器分类
分类原则:适配部件
No. | Adapter | 适配器 | e.g. |
---|---|---|---|
1 | Container Adapter | 容器适配器 |
stack ,queue ,priority_queue
|
2 | Iterator Adapter | 迭代适配器 |
back_inserter ,front_inserter ,inserter
|
3 | Function-Object Adapter | 函数对象适配器 |
bind1st ,bind2nd ,not1 ,not2
|
4. 算法分类
分类原则:按操作类型
No. | Algorithm | 算法 | e.g. |
---|---|---|---|
1 | Read Only | 只读算法 |
find ,count ,search ,for_each ,mismatch ,equal ,binary_search
|
2 | Write Only | 写容器算法 |
fill ,generate ,copy ,transform ,merge ,swap ,replace
|
3 | Sort | 排序算法 |
sort ,stable_sort ,reverse
|
5. 函数对象分类
分类原则:运算类型
No. | Function Object | 函数对象 | e.g. |
---|---|---|---|
1 | Arithmetic Function-Object | 算术函数对象 |
plus<T> ,minus<T> ,multiplies<T> ,divides<T> ,modulus<T> ,negate<T>
|
2 | Relational Function-Object | 关系函数对象 |
equal_to<T> ,not_equal_to<T> ,less<T> ,less_equal<T> ,greater<T> ,greater_equal<T>
|
3 | Logical Function-Object | 逻辑函数对象 |
logical_and<T> ,logical_or<T> ,logical_not<T>
|
6. 分配器
功能:获取释放内存