泛型程序设计(程序的通用性)
Stl =抽象出(算法+数据结构)以实现通用,是一套可拓展的框架
Stl中的六大组件:
1. 容器(数据结构)
2. 算法
3. 迭代器
4. 函数对象(仿函数)(用于扩展)
5. 分配器(用于扩展)
6. 适配器
1. 容器:
序列式容器:
Vector(可变长数组)
数组有序,支持随机访问时间复杂度O1 一步到位
Vector实际不可变长,当预先分配的空间不足时,会再分配更大的空间,然后把原有的值复制进去。(一维数组)
List(列表)
大部分为双向列表,随机访问速度On,插入删除速度O1
设计形式可能不同
Deque(双端队列)
包含有一个Map中控器,每一个map中的键值对,值都指向一块连续的空间。
(涉及2级指针)两端插入速度O1,随机访问速度O2+
关联式容器(通过红黑二叉树实现):
(红黑树:通过旋转,实现自动左右平衡)运用二分法,便于随机查找
随机访问的次一级选择
Set(通过序列号,随机访问元素)
Map(通过key,随机访问value)
Multiset(序号能重复)
Multimap(key能重复)
容器中的数据经过红黑树的重新排序。
2. 适配器(改变对应接口的组件):
适配器,在STL中扮演着转换器的角色,本质上是一种设计模式,用于一种接口转换成另一种接口,从而使原本不兼容的接口能够很好地一起运作。
即添加或屏蔽原有组件中的一些功能。
改变容器的接口,称为容器适配器
栈 stark
队列queue
优先队列
改变迭代器的接口,称为迭代器适配器
反向迭代器
插入迭代器
IO迭代器
改变仿函数的接口,称为仿函数适配器
函数对象适配器
成员函数迭代器
普通函数迭代器
3. 算法(algorithm):
在算法头文件中,可以作用于任何一个容器中
4. 迭代器
用于连接容器与算法,是一个统一的接口。
5. 函数对象
6. 分配器