STL
泛型程序设计
- 列表内容程序尽可能通用
- 将算法从数据结构中抽象出来,成为通用的
STL是什么(做了什么)
泛型程序思想的体现
- 包含常用的数据结构
- 包含常用的基本算法
- 提供了一套可扩展框架
STL六大组件
- 容器(Container)
基本数据结构
vector(向量)
deque(双端队列)
list(列表)
set(集合)
multiset(多重集合)
map(映射)
multimap(多重映射)
序列式容器
有序的
vector
deque
list
频繁的插入或删除,不用在序列内部长距离调转,应该选择list
在vector头部和中间插入删除效率低,在尾部插入删除效率高
deque在头部和尾部插入与删除效率高,实际访问的速度比vector低
关联式容器
无序的
setmultiset
map
multimap
(c11之前使用的是红黑树,之后使用的是哈希表)
二叉树(主要用来做搜索的,分为有序树和无需树),经常会使用有序树
红黑树,保证了左右绝对平衡,左旋或者右旋
- 迭代器(Iterator)
- 分配器(Allocator)
改变了Container或Iterator或function Object借口的组件
容器适配器
为实现类提供新的接口:
栈
队列
优先队列
迭代适配器:
反向迭代器
插入迭代器
IO迭代器
函数适配器:
函数对象适配器
成员函数适配器
普通函数适配器
- 算法(Algorithm)
各种基础算法sort、search等等
- 迭代器
链接Container和Algorithm
smart point(小指针,不完全的指针)
在一个容器元素上进行遍历,也可以是容器的一部分,所有的迭代器都实现了++(累加)和*进行提取值,类似于指针,使用++可以遍历下一个元素,如何遍历取决于容器内部的数据的组织形式。
- 函数对象(仿函数(Functor)Function Object)
- 分配器(Allocator)