我们要知道C++的含义:C语言 + 类 + 模板 (STL就是典型的代表)
STL是Standard Template Library的简称,中文名是标准模库。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。
STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分,就是我们俗称的六大组件。如果想看具体的实现方法,推荐一本书就是侯捷老师的《STL源码剖析》,相信会对大家有帮助的。
接下来呢,我们就着重分析下容器(containers)、算法(algorithms)、配接器(adapters)这三大组件。
一、容器(containers)
通俗的来讲就是系统帮我们封装好的数据结构,每种结构都能装人任意类型,主要是数据结构的操作,它又可分为以下几部分:
(1)序列式容器:
向量(vector) 连续存储的元素<vector>
列表(list) 由节点组成的双向链表,每个结点包含着一个元素<list>
双端队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque>
(2)适配器容器:
栈(stack) 后进先出的值的排列 <stack>
队列(queue) 先进先出的值的排列 <queue>
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>
(3)关联式容器:
集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>
多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>
映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
多重映射(multimap) 允许键对有相等的次序的映射 <map>
二、算法(algorithms)
系统已经帮我们写好了算法,例如:排序、交换、替换等等,我们直接拿来用就好了。
一个算法可以适用很多个容器,比如排序(sort),可以给数组排序,也可以给列表排序。这也是泛型编程的思想,节省了大量的代码。
三、迭代器(iterators)
链接容器和算法——连接器,这也是它们三者的关系。
STL的好处:
(1)节省开发时间,增加了开发效率
(2)高移植性
(3)高性能