C++容器--- 顺序性容器<deque>
来源:互联网 发布:手机淘宝如何申请贷款 编辑:程序博客网 时间:2024/05/19 10:09
--------------------------------------------------------------------------------------------------------------------------------
因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,具体可以遵循下面的原则:
1. 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2. 如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3. 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。
--------------------------------------------------------------------------------------------------------------------------------
deque的特点:
1、支持随机访问,即支持[]以及at(),但是性能没有vector好。
2、可以在内部进行插入和删除操作,但性能不及list。
deque和vector的不同之处:
1、两端都能够快速插入和删除元素。vector只能在尾端进行。
2、deque的元素存取和迭代器操作会稍微慢一些。因为deque的内部结构会多一个间接过程。
3、迭代器是特殊的智能指针,而不是一般指针。它需要在不同的区块之间跳转。
4、deque可以包含更多的元素,其max_size可能更大。因为不止使用一块内存。
5、不支持对容量和内存分配时机的控制。
注意:在除了首尾两端的其他地方插入和删除元素,都将会导致指向deque元素的任何pointers、references、iterators失效。不过,deque的内存重分配优于vector。因为其内部结构显示不需要复制所有元素。
6、deque的内存区块不再被使用时,会被释放。deque的内存大小是可缩减的。
deque和vector相似的特性:
1、在中间部分插入和删除元素相对较慢,因为所有元素都要被移动。
2、迭代器属于随机存取迭代器。
最好采用deque的情形:
1、需要在两端插入和删除元素。
2、无需引用容器内的元素。
3、要求容器释放不再使用的元素。
#include <deque>
构造方法:
- deque<type> deq 创建一个没有任何元素的双端队列
- deque<type> deq(otherDeq) 用另一个类型相同双端队列初始化该双端队列
- deque<type> deq(size) 初始化一个固定size的双端队列
- deque<type> deq(n, element) 初始化n个相同元素的双端队列
- deque<type> deq(begin,end) 初始化双端队列中的某一段元素,从begin 到 end - 1
- deq.assign(n,elem) 赋值n个元素的拷贝给双端队列
- deq.assign(beg,end) 赋值一段迭代器的值给双端队列
- deq.push_front(elem) 添加一个元素在开头
- deq.pop_front() 删除第一个元素
- deq.at(index) 取固定位置的元素
- deq[index] 取固定位置的元素
- deq.front() 返回第一个元素(不检测容器是否为空)
- deq.back() 返回最后一个元素(不检测容器是否为空)
练习代码:
#pragma warning(double:4786)#include <iostream>#include <deque>#include <functional>#include <algorithm>using namespace std;void print(double &t) {cout << t << " ";}template<class T> void print_deque(deque<T>& dt) {//迭代器相关函数//返回值为迭代器型:begin()、end()、rbegin()、rend()、//返回值为引用:front()、back()deque<T>::iterator d;for (d = dt.begin();d!=dt.end(); d++){cout << *d << " ";}}void main() {//定义deque<double> d1;deque<double> d2(5);deque<double> d3(5, 4);deque<double> d4(d1);deque<double> d5(d1.begin(), d1.end());d4.resize(6);cout <<"d4的size:" <<d4.size() << endl;for (int i = 0; i < 7; i++){double dt = i*1.01 + 4.5;d1.push_front(dt);}d1.push_back(66);cout << " L1:";for_each(d1.begin(), d1.end(), print);cout << endl;//判断是否为空empty()if(!d1.empty()) {d1[2] = 7.7; //deque提供了运算符[]和at()cout << "d1的第二个元素是:";print(d1.at(2));}cout << endl;cout << " 修改元素后的L1:";print_deque(d1);cout << endl;//assign()重置d1.assign(4,0);cout << " 重置assign后的L1:";print_deque(d1);cout << endl;//交换swapswap(d1,d3);cout << "swap后 d1:";print_deque(d1);cout << endl;cout << "swap后 d2:";print_deque(d2);cout << endl;//插入insert()d2.insert(d2.begin(),6.666);//erase():单个元素或者相邻几个元素、clear():删除所有元素d2.erase(d2.begin()+1);d2.clear();//deque没有提供查找和搜索相关的函数,所以使用<algorithm>中的find()函数;deque<double>::iterator dt2 = find(d2.begin(),d2.end(),8.6);int step = (dt2 - d2.begin());cout <<"8.6在:"<< step << endl;//deque亦包含了很多运算符==、[]等system("pause");}
- C++容器--- 顺序性容器<deque>
- 【day0411 C++】顺序容器 STL deque类
- 顺序性容器(vector&list&deque)
- Chapter 8.顺序容器deque
- c++STL(三)顺序容器deque,list,forward_list
- c++STL之顺序容器(vector、deque、list)分析
- 【C++】STL常用容器总结之六:基于deque的顺序容器适配器
- deque容器
- deque容器
- deque容器
- deque容器
- Deque容器
- 由浅入深-顺序容器(vector deque list)
- C++顺序容器vector、deque、list
- 顺序容器vector、list、deque的区别
- 顺序容器list、vector、deque的优劣
- 顺序容器vector、list、deque的区别
- 顺序容器vector、list、deque(整理中)
- 51nod 1264 线段相交(几何)
- 阿里JAVA规约插件IDEA实操
- 3秒钟不懂你砍我:RecyclerView下拉刷新和上拉加载更多(开源中国List业务流程全解析)
- 爱客科技王付义:我眼中的VR一体机和VR 2015
- Google超有趣 AI 小实验合集
- C++容器--- 顺序性容器<deque>
- 策略模式
- 银行发短信要冻结资金?手机管家提醒当心诈骗
- 我们所有的向往,是发掘更好用的应用和手机
- 中兴发布AXON天机MAX 以高端服务强化高端市场
- SNH48与手机管家合作来电秀 一大波圣诞礼物来袭
- 萤石云 服务器错误 10017
- 公约数的和(数论,欧拉函数)
- 得图CTO孙其瑞谈互联网未来 VR全景将是另一块屏幕