||
容器是用来存储和组织其他对象的对象。实现链表的类就是一个容器的示例。如
vector<double> mydata;//创建存储double类型值的容器mydata
可以在容器中存储基本类型或任何类类型的条目。如果STL容器模板的类型实参是一个类类型,那么容器可以存储该类型的对象或者任何派生类类型的对象。通常,容器存储我们存储在其中的对象的副本,它们自动分配和管理对象占用的内存。当销毁某个容器的对象时,容器会负责销毁它包含的对象并释放它们占用的内存。使用STL容器存储对象的一个优点是我们不用费心管理它们的内存。 在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。 经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。
STL容器类的模板
容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系。
数据结构描述实现头文件
向量(vector) 连续存储的元素 <vector>
列表(list) 由节点组成的双向链表,每个结点包含着一个元素<list>
双队列(deque) 连续存储的指向不同元素的指针所组成的数组 <deque>
集合(set) 由节点组成的红黑树,每个节点都包含着一个元素, <set>
节点之间以某种作用于元素对的位次排列,
没有两个不同的元素能够拥有相同的次序
多重集合(multiset) 允许存在两个次序相等的元素的集合<set>
栈(stack) 后进先出的值的排列 <stack>
队列(queue) 先进先出的值的排列 <queue>
优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的一种队列 <queue>
映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>
多重映射(multimap) 允许键对有相等的次序的映射 <map>
为所有容器定义的操作
容器操作法 |
操作方法解释
|
X u | 创建一个名为u的空对象 |
X() | 创建一个空对象 |
X(a) | 创建对象x的拷贝 |
X u(a) | u是a的拷贝(复制构造函数) |
X u=a | u是a的拷贝(复制构造函数) |
r=a | r等于a的值(复制赋值) |
X u(rv) | u等于rv的原始值(移动构造函数) |
X u=rv | u等于rv的原始值(移动构造函数) |
a=rv | u等于rv的原始值(移动赋值) |
(&a)->~X() | 对象的每个元素执行析构函数 |
begin() | 返回一个指向第一个元素的迭代器 |
end() | 返回一个指向超尾的迭代器 |
cbegin() | 返回一个指向第一个元素的const迭代器 |
cend() | 返回一个指向超尾的const迭代器 |
size() | 返回元素数目 |
maxsize() | 返回容器的最大可能长度 |
empty() | 如果容器为空,则返回true |
swap() | 交换两个容器的内容 |
== | 容器的长度、元素与元素的顺序相同,则true |
!= | a!=b返回!(a==b) |
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-21 07:15
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社