hc505722924的个人博客分享 http://blog.sciencenet.cn/u/hc505722924

博文

容器

已有 1705 次阅读 2016-9-4 09:00 |系统分类:科研笔记| STL容器

容器是用来存储和组织其他对象的对象。实现链表的类就是一个容器的示例。如

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)




https://blog.sciencenet.cn/blog-3192212-1000727.html


下一篇:水浒中大刀关胜何以力压林冲成为五虎之首?
收藏 IP: 115.155.1.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-28 20:44

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部