STL6大组件
容器,迭代器,算法,适配器,空间配置器,仿函数
STL六大组件的交互关系
容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略变化,适配器可以修饰仿函数
- 适配器可以把原来访函数中只能扔一个函数变成两个函数
- 仿函数可以协助算法…意思是今天要查大于5的明天要查小于5的。可以修改
容器
各种数据结构如:vector*list**deque**set**map*
- 序列式容器 :
1、存储的顺序和遍历时的顺序一样
2、 固定位置,除非用删除或插入的操作 Vector容器,Deque容器List容器等 - 关联式容器:
1、按照指定的顺序排列,如果没有指定,会默认有一个
2、元素在容器中并没有保存元素置入容器时得逻辑顺序
3、特点:在值中选择一个值作为关键字key,这个关键字对值起到索引作用,方便查找
4、例如:Set/multiset/Map/multimap
迭代器
容器和算法的桥梁,依次寻访某个容器所含的各个元素。
迭代器 | 功能 |
---|---|
输入迭代器 | 只读 |
输出迭代器 | 只读 |
前向迭代器 | 读写、向前推进 |
双向迭代器 | 读写、向前向后操作 |
. 随机访问迭代器 读写、跳跃式的方式访问容器中任意数据,是功能最强的迭代器
算法
#include’‘algorithm’’ 需要记住,引入头文件.例如:sort,find,copy,for_each
- 质变算法 运算过程中会更改区间内的元素的内容,例如拷贝,替换,删除等
- 非质变算法 运算过程中不会更改区间内元素内容,例如查找,计数,遍历,寻找
适配器(不是重点)
实现接口
空间配置器(不是重点)
实现动态空间配置,空间管理,空间释放
仿函数(不是重点)
类似函数实现重载
C++STL库 优点
- 是C++的一部分,不用额外安装什么,内建在编译器之内
- 重要特性:数据和操作分离,数据由容器管理,操作则由可定制的算法定义,迭代器作为两者的粘合剂,使算法和容器交互运作
- 不用思考STL具体实现过程,只要能够熟练使用STL就ok
- STL具有可重用性,高性能,高移植性,跨平台的优点
优点 | 详细描述 |
---|---|
高可用性 | 采用模板类和模板函数 |
高性能 | 如map可以高效地从十几万条记录里查找出指定的记录,应为map采用红黑树的变体实现 |
高移植性 | 项目A上用STL编写的模块可以直接移植到项目B上 |