没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
文档中心 其他开发语言 阅读:评论: 参与评论
标题
深入研究 C++中的 STL Deque 容器 选择自 的
关键字 深入研究 中的 容器
出处
本文档深入分析了 ,并提供了一个指导思想:当考虑到内存分配和执行性能的时候,使用
要比 好。
介绍
本文深入地研究了 容器。本文将讨论在一些情况下使用 比 更好。
读完这篇文章后读者应该能够理解在容量增长的过程中 与 在内存分配和性能的不同表
现。由于 和 的用法很相似,读者可以参考 文档中介绍如何使用 容器。
Deque 总览
和 一样都是标准模板库中的内容, 是双端队列,在接口上和 非常
相似,在许多操作的地方可以直接替换。假如读者已经能够有效地使用 容器,下面提供
的成员函数和操作,进行对比参考。
Deque 成员函数
函数 描述
!"#$%&#'
!"#$#&('
将)%*#'区间中的数据赋值给 。
将 # 个 ( 的拷贝赋值给 。
!$"+'
传回索引 "+ 所指的数据,如果 "+ 越界,抛出
,-,!#。
%!.$'
传回最后一个数据,不检查这个数据是否存在。
%"#$'
传回迭代器重的可一个数据。
!$'
移除容器中所有数据。
/0(
/0(1$'
/0($#'
/0($#&('
/0($%&#'
2/0($'
创建一个空的 。
复制一个 。
创建一个 ,含有 # 个数据,数据均已缺省构造产生。
创建一个含有 # 个 ( 拷贝的 。
创建一个以)%*#'区间的 。
销毁所有数据,释放内存。
(34$'
判断容器是否为空。
#$'
指向迭代器中的最后一个数据地址。
!$3'
!$%&#'
删除 3 位置的数据,传回下一个数据的位置。
删除)%&#'区间的数据,传回下一个数据的位置。
-#$'
传回地一个数据。
,!!
使用构造函数返回一个拷贝。
"#$3&('
"#$3&#&('
"#$3&%&#'
在 3 位置插入一个 ( 拷贝,传回新数据位置。
在 3 位置插入# 个 ( 数据。无返回值。
在 3 位置插入在)%&#'区间的数据。无返回值。
(!+,"5$'
返回容器中最大数据的数量。
33,%!.$'
删除最后一个数据。
33,-#$'
删除头部数据。
3,%!.$('
在尾部加入一个数据。
3,-#$('
在头部插入一个数据。
%"#$'
传回一个逆向队列的第一个数据。
#$'
传回一个逆向队列的最后一个数据的下一个位置。
"5$#('
重新指定队列的长度。
"5$'
返回容器中实际数据的个数。
1 !3$'
!3$1&'
将 1 和 元素互换。
同上操作。
操作
函数 描述
3!)6
返回容器中指定位置的一个引用。
上面这些特征和 明显相似,所以我们会提出下面的疑问。
问题:如果 和 可以提供相同功能的时候,我们使用哪一个更好呢?
回答:如果你要问的话,就使用 吧。
或者你给个解释?
非常高兴你这样问,的确,这并不是无中生有的,事实上,在 标准里解释了这个问题,下面
有一个片断:
在默认情况下是典型的使用序列的方法,对于 ,当使用插入删除操作的时候是一
个更好的选择。
有趣的是,本文就是要非常彻底地理解这句话。
什么是新的?
细读上面两张表格,你会发现和 比较这里增加了两个函数。
1、 3,-#$('77在头部插入一个数据。
、 33,-#$'77删除头部数据。
调用方法和 3,%!.$('和 33,%!.$'相同,这些将来会告诉我们对于 会
非常有用, 可以在前后加入数据。
缺少了什么?
同时你也会发现相对于 缺少了两个函数,你将了解到 不需要它们。
1、!3!"4$'77返回 当前的容量。
、$'77给指定大小的 分配空间。
这里是我们真正研究的开始,这里说明 和 它们在管理内部存储的时候是完全不
同的。 是大块大块地分配内存,每次插入固定数量的数据。 是就近分配内存(这可能
不是一个坏的事情)。但我们应该关注是, 每次增加的内存足够大的时候,在当前的内存不够
的情况。下面的实验来验证 不需要 !3!"4$'和 $'是非常有道理的。
实验一 —— 增长的容器
目的
目的是通过实验来观察 和 在容量增长的时候有什么不同。用图形来说明它们在分
配内存和执行效率上的不同。
描述
这个实验的测试程序是从一个文件中读取文本内容,每行作为一个数据使用 3,%!. 插入到
和 中,通过多次读取文件来实现插入大量的数据,下面这个类就是为了测试这个内
容:
8"#/
8"#/-!(
8"#/"#
8"#/
!"#((
9
:;,<=><?&
:;,=0@A&
:;,0BC0
D*
!=
9
3%"
=$'*
"A!:"$#!E5:"&"#";'
9
!%F)+::::6?9D*
"-!("#:"*
"#:" 3#$5:"'*
"$G"#:" -$''
9
"#:" "#$%F&"5-$%F''*
"-$";??:;,=0@A'
(,!! 3,%!.$%F'*
"-$";??:;,0BC0'
(,!! 3,%!.$%F'*
D
剩余26页未读,继续阅读
资源评论
poiuy343
- 粉丝: 7
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功