一、STL简介
STL,Standard Template Library,标准模板库 STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)、iterator(迭代器)。几乎所有的代码都采用了模板类和模板函数的方式,相比于传统的由类和函数组成的库来说提供了更好的代码重用机会。在C++标准中,STL分为13个头文件<algorithm><deque><functional><iterator><vector><list><map><memory><numeric><queue><set><stack><utility>
二、算法
STL提供了大约100个实现算法的模板函数,如for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以自己所指定的规则对序列进行稳定性排序等等。 算法部分主要由头文件<algorithm>
,<numeric>
和<functional>
组成。
<algorithm>
是所有STL头文件中最大的一个,是由一大堆模板函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。
<numeric>
体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
<functional>
中则定义了一些模板类,用以申明函数对象。
三、容器
STL容器允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模板类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。 容器部分主要由头文件<vector><list><deque><set><map><stack>
和<queue>
组成。
四、迭代器
软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。
概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件<utility>
,<iterator>
和<memory>
组成。
<utility>
是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明;
<iterator>
中提供了迭代器使用的许多方法;
<memory>
不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>
中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。