1简介
STL被内建在你的
编译系统之内。STL的版本很多,常见的有HP STL、PJ STL、 SGI STL等。
在C++标准中,STL被组织为下面的13个头文件:<
algorithm>、<
deque>、<
functional>、<
iterator>、<
array>、<
vector>、<
list>、<forward_list>、<
map>、<unordered_map>、<
memory>、<
numeric>、<
queue>、<
set>、<unordered_set>、<
stack>和<
utility>。
2组成部分
STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adaptors)、算法(algorithms)、仿函数(functors)六个部分。
容器(containers)
定义
容器是用来存储和组织其他对象的对象。实现链表的类就是一个容器的示例。如
vector<double> mydata;//创建存储double类型值的容器mydata
可以在容器中
存储基本类型或任何类类型的条目。如果
STL容器模板的类型实参是一个类类型,那么容器可以存储该类型的对象或者任何派生类类型的对象。通常,容器存储我们存储在其中的对象的副本,它们自动分配和管理对象占用的内存。当销毁某个容器的对象时,容器会负责销毁它包含的对象并释放它们占用的内存。使用STL容器存储对象的一个优点是我们不用费心管理它们的内存。 在实际的开发过程中,
数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对
时间要求很高的部分时,数据结构的选择就显得更加
重要。 经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的
代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中
元素的数据类型,可以将我们许多重复而乏味的工作简化。
STL容器类的模板
容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表
总结一下它们和相应头文件的对应关系。
数据结构 描述 实现头文件
向量(vector) 连续存储的元素 <vector>
双队列(deque) 连续存储的指向不同元素的指针所组成的数组 <deque>
集合(set) 由节点组成的红黑树,每个节点都包含着一个元素, <set>
节点之间以某种作用于元素对的位次排列,
没有两个不同的元素能够拥有相同的次序
多重集合(multiset) 允许存在两个次序相等的元素的
集合<set>
栈(stack) 后进先出的值的排列 <stack>
队列(queue) 先进先出的执的排列 <queue>
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词
决定的一种队列 <queue>
映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
多重映射(multimap) 允许键对有相等的次序的映射 <map>
为所有容器定义的操作