软件界的需求:
1、建立一种可重复利用的东西
2、建立一套数据结构与算法的标准
——C++的面向对象与泛型编程思想,目的是提升代码的复用性。
——STL,是C++为建立数据结构和算法的一套标准。
STL(标准模板库)
从广义上分为:容器(container)、算法(algorithm)和迭代器(iterator)
容器和算法之间通过迭代器进行无缝连接
STL几乎所有的代码都采用模板类或者模板函数
STL六大组件:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
1、容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据
2、算法:各种常用算法,如sort、find、copy、for_each等
3、迭代器:容器与算法之间的胶合剂
4、仿函数:行为了类似函数,可作为算法的某种策略
5、适配器:一种可以用来修饰容器或者仿函数或迭代器接口的东西
6、空间支配器:负责空间的配置和管理
容器:置物之器也
STL容器封装一些广泛应用的数据结构。常用的数据结构有:数组、链表、树、栈、队列、集合、映射表等
容器分为两种:序列式容器和关联式容器
序列式容器:强调值的排序,序列式容器中的每一个元素均有固定的位置
关联式容器:二叉树结构,各个元素之间没有严格的物理上的顺序关系。
算法:问题之解法也
算法分类:质变算法和非质变算法
质变算法:算法在运算的过程中会更改区间的元素的内容。如拷贝、替换、删除等等
非质变算法:与质变算法相反。例如查找、计数、遍历、寻找极值等等
迭代器:容器和算法之间的粘合剂
每个容器都有自己的专属迭代器。迭代器类似指针
迭代器的种类:输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器
输入迭代器:对数据的只读的访问
输出迭代器:对数据的只写访问
前向迭代器:读写操作,并能向前推进迭代器
双向迭代器:读写操作,并能向前和向后操作
随机访问迭代器:读写操作,可以跳跃的方式 访问任意数据,功能最强的迭代器