STL是C++通用库,主要由迭代器、算法、容器、仿函数、内存分配器和配接器组成。
STL主要的主要功能都被声明在13个头文件中,它们分别是:< algorithm >、< deque >、< functional >、< iterator>、< vector>、< list>、< map>、< memory>、< numeric>、< queue>、< set>、< stack>、< utility>。
一、容器
STL提供了很多类型的容器,包括:
- vertor< T >: 一种支持动态扩展的数组容器
- list < T>: 双向链表容器
- queue< T>: 队列容器
- statck< T>: 栈容器
- deque< T>: 双端队列容器
- priority_queue< T>: 优先级队列容器
- set< T>: 集合容器
- multiset< T>: 一种容许存在重复元素的集合容器
- map< key, val>:一种映射关联容器
- multimap<key,val>:一种允许存在重复key值的映射关联容器
另外,若要将某对象放入上述容器中进行管理,则其要必须满足以下三个条件:
- 元素必须是可复制的
- 元素必须是可指派(修改)的
- 元素内存必须是可释放的,即析构函数不能为private
二、算法
除了容器外,STL还为我们提供了大量非常简单好用的算法,功能包括但不限于查询、排序、赋值、修改、数值运算等,这些算法都是以模板的形式在命名空间std内实现的。借助迭代器,STL的算法函数可以用于任意容器。
三、迭代器
迭代器大概可以分为五种类型,分别是:
- 输入迭代器
- 输出迭代器
- 前向迭代器
- 双向迭代器
- 随机访问迭代器(功能最为强大)
迭代器的作用主要是:用来遍历容器,使算法能够不依赖容器而完成特定任务,迭代器的出现使算法和容器分离成为可能。
四、仿函数
仿函数(functor),就是使一个类的使用看上去象一个函数:其实其就是在类中实现一个operator(),使这个类有了类似函数的行为,就是一个仿函数类了。仿函数可以理解为函数的一般形式,仿函数通过运算符定义显著提高了代码运行效率。
5、内存配置器及配接器
最常用的配接器有istream_iterator,提供了函数copy的接口。
另外STL还提供了3种容器配接器:stack< Container>,queue< Container>、deque< Container>。