(转)深入研究 C++中的 STL Deque 容器 - 微尘--KeepMoving - C++博客

(转)深入研究 C++中的 STL Deque 容器 - 微尘--KeepMoving - C++博客

ID:37575671

大小:156.07 KB

页数:8页

时间:2019-05-25

(转)深入研究 C++中的 STL Deque 容器 - 微尘--KeepMoving - C++博客_第1页
(转)深入研究 C++中的 STL Deque 容器 - 微尘--KeepMoving - C++博客_第2页
(转)深入研究 C++中的 STL Deque 容器 - 微尘--KeepMoving - C++博客_第3页
(转)深入研究 C++中的 STL Deque 容器 - 微尘--KeepMoving - C++博客_第4页
(转)深入研究 C++中的 STL Deque 容器 - 微尘--KeepMoving - C++博客_第5页
资源描述:

《(转)深入研究 C++中的 STL Deque 容器 - 微尘--KeepMoving - C++博客》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、本文档深入分析了std::deque,并提供了一个指导思想:当考虑到内存分配和执行性能的时候,使用std::deque要比std::vector好。介绍本文深入地研究了std::deque容器。本文将讨论在一些情况下使用deque>比vector更好。读完这篇文章后读者应该能够理解在容量增长的过程中deque与vector在内存分配和性能的不同表现。由于deque>和vector的用法很相似,读者可以参考vector文档中介绍如何使用STL容器。Deque总览deque和vector一样都是标准模板库中的内容,deque是双端队列,在接口上和vector非常相似,在许多操作的地方

2、可以直接替换。假如读者已经能够有效地使用vector容器,下面提供deque的成员函数和操作,进行对比参考。Deque成员函数函数描述c.assign(beg,end)将[beg;end)区间中的数据赋值给c。c.assign(n,elem)将n个elem的拷贝赋值给c。c.at(idx)传回索引idx所指的数据,如果idx越界,抛出out_of_range。c.back()传回最后一个数据,不检查这个数据是否存在。c.begin()传回迭代器重的可一个数据。c.clear()移除容器中所有数据。dequec创建一个空的deque。dequec1(c2)复

3、制一个deque。Dequec(n)创建一个deque,含有n个数据,数据均已缺省构造产生。Dequec(n,elem)创建一个含有n个elem拷贝的deque。Dequec(beg,end)创建一个以[beg;end)区间的deque。c.~deque()销毁所有数据,释放内存。c.empty()判断容器是否为空。c.end()指向迭代器中的最后一个数据地址。c.erase(pos)删除pos位置的数据,传回下一个数据的位置。c.erase(beg,end)删除[beg,end)区间的数据,传回下一个数据的位置。c.front()

4、传回地一个数据。get_allocator使用构造函数返回一个拷贝。c.insert(pos,elem)在pos位置插入一个elem拷贝,传回新数据位置。c.insert(pos,n,elem)在pos位置插入>n个elem数据。无返回值。c.insert(pos,beg,end)在pos位置插入在[beg,end)区间的数据。无返回值。c.max_size()返回容器中最大数据的数量。c.pop_back()删除最后一个数据。c.pop_front()删除头部数据。c.push_back(elem)在尾部加入一个数据。c.push_front(elem)在头部插入一个数据。c.

5、rbegin()传回一个逆向队列的第一个数据。c.rend()传回一个逆向队列的最后一个数据的下一个位置。c.resize(num)重新指定队列的长度。c.size()返回容器中实际数据的个数。C1.swap(c2)将c1和c2元素互换。Swap(c1,c2)同上操作。Deque操作函数描述operator[]返回容器中指定位置的一个引用。上面这些特征和vector明显相似,所以我们会提出下面的疑问。问题:如果deque和vector可以提供相同功能的时候,我们使用哪一个更好呢?回答:如果你要问的话,就使用vector吧。或者你给个解释?非常高兴你这样问,的确,这并不是无中生有的

6、,事实上,在C++标准里解释了这个问题,下面有一个片断:vector在默认情况下是典型的使用序列的方法,对于deque,当使用插入删除操作的时候是一个更好的选择。有趣的是,本文就是要非常彻底地理解这句话。什么是新的?细读上面两张表格,你会发现和vector比较这里增加了两个函数。1、c.push_front(elem)——在头部插入一个数据。2、c.pop_front()——删除头部数据。调用方法和c.push_back(elem)和c.pop_back()相同,这些将来会告诉我们对于deque>会非常有用,deque可以在前后加入数据。>缺少了什么?同时你也会发现相对于vect

7、or>缺少了两个函数,你将了解到deque>不需要它们。1、capacity()——返回vector当前的容量。2、reserve()——给指定大小的vector>分配空间。这里是我们真正研究的开始,这里说明deque>和vector它们在管理内部存储的时候是完全不同的。deque是大块大块地分配内存,每次插入固定数量的数据。vector是就近分配内存(这可能不是一个坏的事情)。但我们应该关注是,vector每次增加的内存足够大的时候,在当前的内存不够的情况。下面的实验来验证de

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。