STL(Standard Template Library),是C++标准库的一部分。包括5个组件:
- 算法(algorithm)
- 容器(container)
- 迭代器(iterator)
- 函数(function)
- 适配器(adapter)
模板(template)是C++语言的一个优势,而标准模板库正是基于此。
1.容器(container)
STL包含了序列式容器(sequence container)和关联式容器(associative container)。
序列式容器有vector, deque,list:
容器 | 数据描述 |
vector | 1. 动态数组,可替代C++内置数组,vector可以如同数组一样的访问方式,例如使用下标(subscript)运算符,并记得自己的长度信息(size),也可以使用对象的访问方式访问vector(push、pop)。使用vector可以轻易地定义二维可调整型数组。 2. vector可在常量时间内完成在vector末尾插入/删除元素,但在vector中间或开头插入/删除元素,则需要线性时间。 |
list | 1. 是一个有序的数据结构,每个元素中存储着上一个元素和下一个元素的指针,因此是一个双向链接的链表。 2. 与vector相比,其元素的访问速度较慢,而插入和删除元素较快。 |
deque | 双端队列,可看做为能在常量时间内完成向开头或结尾插入或删除元素的vector,但是修改之后,其迭代器的有效性就无法得到保障。 |
关联式容器有set,multiset,map,multimap:
容器 | 数据描述 |
set | 集合。 |
multiset | 跟set具有相同功能,但允许有重复的元素。 |
map | 关联数组,每个元素含有两个数据项,map将一个数据项映射到另一个数据项中。 |
multimap | 跟map具有相同功能,但允许重复的键值。 |
hash_set hash_multiset hash_map hash_multimap | 1. 分别类似于集合、多重集合、映射、多重映射。但是,使用hash_table实现。它的键(keys)没有排序,但是必须存在一个对键值的哈希函数。 2. 这些容器并不是C++标准库的一部分,但可能未来被C++标准库收录。 |
其他类型的容器:
容器 | 数据描述 |
bitset | 存储系列位类似的固定大小的布尔矢量。实现按位运算,缺乏迭代器,不是串行。 |
valarray | 不懂。 |
2.迭代器(iterator)
迭代器是泛化的指针,通过使用迭代器,开发者可以操作数据结构而无需关心其内部实现。
根据迭代器操作方式的不同,迭代器分为五种:
- input iterator
- output iterator
- forward iterator
- bidirectional iterator
- random access iterator
3.算法(function)
STL提供了一些常用的算法,如排序和搜索等。这些算法与数据结构的实现实现了分离,因此,同样对于自定义的数据结构也可以使用这些算法,只需让这些自定义的数据结构拥有算法所预期的迭代器。
4.函数对象(function)
函数对象即重载了操作符()的对象。类的实例都可称为函数对象。
5.适配器(adaptor)
适配器为一个模板类,用于提供接口映射。
参考:
1. 标准模板库,维基百科