STL简述
什么是STL就不多说了,在C++中合理运用STL标准库是非常方便的,对数据结构和一些算法的学习也很有帮助,提供了许多便利。
主要内容
主要包含六个组件,本篇文章主要介绍前三个。
- 容器(Container),是一种数据结构,如常用的Vector,List,Deque,Set,Map,等,以模板类的方法提供,为了访问容器中的数据,可使用由容器类输出的迭代器。
- 迭代器(Iterator),提供了访问容器中对象的方法,迭代器相当于一个指针。
- 算法(Algorithm),是用来操作容器中的数据的模板函数。函数本身与他们的操作的数据的结构和类型无关。
- 仿函数,使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类。
- 适配器,是一种设计模式,主要分为容器适配器(主要包括:
stack 默认基于deque容器实现
queue 默认基于deque容器实现
priority_queue 默认基于vector容器实现 )
迭代器适配器、算法适配器(函数适配器)。适配器并不是第一类的容器,因为它们并没有提供与元素的保存形式有关的真正数据结构实现,并且适配器不支持迭代器。但适配器的优点是:能够使程序员选择一种合适的底层数据结构。 - 分配器,分配器为为容器再内存中分配空间。容器的一般默认分配器是 std::allocator ,该分配器是一个类模板。对内存空间分配的动作(分配器,new,operator new()等)一般最后都会调用malloc() 。malloc() 再根据不同的操作系统调用其底层的API。同理释放内存对应的free()。
容器介绍
STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。
-
顺序性容器是一种各元素之间有顺序关系的线性表。
-
关联式容器是非线性的结构,包含二叉树结构和hash结构。元素在关联容器中没有保存元素置入容器时的逻辑顺序。但是关联式容器提供了另一种根据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。
-
容器适配器:以某种容器作为底部结构,将其接口改变,使得它满足与另一种数据结构的接口,例如借助deque分别实现stack和queue接口,借助vector实现priority_queue接口。
顺序性容器
动态数组vector、双向循环链表list、双向队列deque等。
Vector
List
Deque
关联性容器
集合set、多重集合multiset、map(提供“键-值”关系)、multimap等。
Set
MultiSet
Map
声明
#include<map>
//例子
map<int,string>ID_Student;
MultiMap
容器适配器
栈stack、队列queue和优先级队列priority_queue。
Stack
经典应用:括号匹配
Queue
经典应用 报数游戏