deque的用法及其与vector、list应用比较
2014-09-08 12:18
357 查看
deque(双端队列)快速的访问随机的元素,快速的在开始和末尾插入元素。随机的插入删除元素较慢,空间的从新分配空间后,原有的元素不需要备份。对deque的排序操作,可将deque先复制到vector,排序后再复制回deque。
应用比较:(1)采用deque:对数据有复杂操作,即需要前后增删数据的能力,又要良好的数据访问速度,集
vector和list的优点于一体。
(2)采用list:擅长插入删除的链表,侧重于中间增加删除数据的速度。
(3)采用vector:保存不定长数组,需要动态增加的能力,侧重于寻找数据的速度。
下面就以程序运行的方式展示deque的基本操作,包括容器构造、首尾部插入与弹出元素、用at或迭代器访问元素、指定位置插入一个或多个元素、其他deque元素插入现有的deque中、逆序输出、其他元素置换deque以及其他deque置换现有deque。
![](http://img.blog.csdn.net/20140908123255296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHliODkwODI2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
还是一样,希望能够将程序运行结果和程序的代码一一比对查看,这样效果明显,记忆深刻。后续将补上stack和queue容器的基本用法。
应用比较:(1)采用deque:对数据有复杂操作,即需要前后增删数据的能力,又要良好的数据访问速度,集
vector和list的优点于一体。
(2)采用list:擅长插入删除的链表,侧重于中间增加删除数据的速度。
(3)采用vector:保存不定长数组,需要动态增加的能力,侧重于寻找数据的速度。
下面就以程序运行的方式展示deque的基本操作,包括容器构造、首尾部插入与弹出元素、用at或迭代器访问元素、指定位置插入一个或多个元素、其他deque元素插入现有的deque中、逆序输出、其他元素置换deque以及其他deque置换现有deque。
#include<iostream>//deque用法 # include<deque> using namespace std; int main() { //四种初始化方法 deque<int>d;//创建空deque deque<int>d1(2,5);//创建有两个元素5的deque deque<int>d2(10,1);//创建一个拥有10个元素1的deque deque<int>d3(d2);//复制构造函数 //向尾部插入元素 d.push_back(10); d.push_back(20); d.push_back(30); d.push_back(40); d.push_back(50); //at(n)取第n个元素,也可以用迭代器的方式取deque元素 cout<<"push_back之后……"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; //双向队列首部插入元素 d.push_front(5); d.push_front(4); d.push_front(3); d.push_front(2); d.push_front(1); cout<<"push_front之后"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; //双向队列首部弹出元素 d.pop_front(); d.pop_front(); d.pop_front(); cout<<"pop_front之后"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; //双向队列尾部弹出元素 d.pop_back(); d.pop_back(); cout<<"pop_back之后"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; //指定位置插入元素 deque<int>::iterator it; d.insert(d.begin(),1); it=d.begin(); cout<<*it<<endl;//it如果在插入之前赋值,则输出会出现错误 cout<<"在某一个位置insert一个元素之后"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; //指定位置插入多个元素 d.insert(d.begin()+3,3,100); cout<<"在某一个位置insert多个元素之后"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; //用其他deque元素插入到现有deque中 cout<<"d2的元素:"<<endl; for(int i=0;i<d2.size();i++) cout<<d2.at(i)<<"\t"; cout<<endl; d.insert(d.begin(),d2.begin(),d2.end()); cout<<"在某一个位置insert同类deque元素之后"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; //首尾元素输出 cout<<"front and back:"<<endl; cout<<d.front()<<endl; cout<<d.back()<<endl; cout<<"在某一个位置front.back之后"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; //逆序输出 deque<int>::reverse_iterator end=d.rbegin(); cout<<"从尾部开始输出"<<endl; for(;end!=d.rend();end++) cout<<*end<<"\t"; cout<<endl; //用n个元素置换deque d.assign(3,99); cout<<"用n个元素置换原来的deque之后"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; //用另一个deque置换现有deque d.assign(d1.begin(),d1.end()); cout<<"另一个deque替换"<<endl; for(int i=0;i<d.size();i++) cout<<d.at(i)<<"\t"; cout<<endl; return 0; }运行结果演示:
还是一样,希望能够将程序运行结果和程序的代码一一比对查看,这样效果明显,记忆深刻。后续将补上stack和queue容器的基本用法。
相关文章推荐
- c++ list, vector,deque, map,set 区别与用法比较
- vector与 list与 deque的比较
- vector,list,deque。用法区别
- vector list deque比较
- ArrayList、LinkedList、 Vector、Map 用法比较
- STL序列容器 vector, list, deque的比较
- stl中容器string vector list deque 比较
- 关于容器的用法(vector,deque,list,set,map etc.)
- ArrayList、LinkedList、 Vector、Map 用法比较
- C++各个容器比较(vector,deque,list,set,map,queue,stack)
- ArrayList、LinkedList、 Vector、Map 用法比较
- C++ 中list、vector和deque比较
- C++ 中list、vector和deque比较[转]
- C++ 中list、vector和deque比较
- STL容器类vector,list,deque的比较
- vector, list, deque 比较
- ArrayList、LinkedList、 Vector、Map 用法比较
- STL容器 vector,list,deque 性能比较
- STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map
- 《STL 中 vector deque list 的常见应用》