deque采用分块的星星存储结构来存储数据,每块的大小一般为512个字节,称为一个deque块,所有的deque块使用一个map块进行管理,每个map数据项纪录各块的首地址。
deque块在头部和尾部都可以插入和删除元素,而不需要移动其他元素(使用push_back()方法在尾部插入元素,会扩张队列;而使用push_back()方法在手部插入元素和使用insert()方法在中间插入元素)。
一般来说,当考虑到容器元素的内存分配策略和操作的性能时,deque相对于vector更具有优势。
使用deuqe需要声明头文件包含“#include<deque>”。
创建deque对象的方法通常有三种,建立对象的时候可以选择不带参数,带一个参数,两个参数。
deque<int> d; deque<float> dd;
deque<int> d(10); //创建具有10个整形元素的deque对象d
deque<float> d(10,2.5); //创建1具有10个初值为2.5的float型的deque对象d
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl; return 0; }程序输出 1 2 3
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; d.push_back(1); d.push_back(2); d.push_front(3); cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl; return 0; }程序输出 3 1 2
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); d.insert(d.begin()+1,10); cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<" "<<d[3]<<endl; return 0; }程序输出 1 10 2 3
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); for(int i=0;i<3;i++)cout<<d[i]<<" "; return 0; }
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); deque<int>::iterator it; for(it=d.begin();it<d.end();it++)cout<<*it<<" "; return 0; }
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); deque<int>::reverse_iterator rit; for(rit=d.rbegin();rit<d.rend();rit++)cout<<*rit<<" "; return 0; }输出 3 2 1
可以从deque中的首部、尾部、中部删除元素,并可以清空双端队列容器。
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; for(int i=1;i<10;i++) d.push_back(i); d.pop_front(); d.pop_front(); deque<int>::iterator it; for(it=d.begin();it<d.end();it++)cout<<*it<<" "; return 0; }
输出 3 4 5 6 7 8 9
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; for(int i=1;i<10;i++) d.push_back(i); d.pop_back(); d.pop_back(); deque<int>::iterator it; for(it=d.begin();it<d.end();it++)cout<<*it<<" "; return 0; }
输出:1 2 3 4 5 6 7
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; for(int i=1;i<10;i++) d.push_back(i); d.erase(d.begin()+2); d.erase(d.begin()+5); deque<int>::iterator it; for(it=d.begin();it<d.end();it++)cout<<*it<<" "; return 0; }
输出:1 2 4 5 6 8 9
#include<deque> #include<iostream> using namespace std; int main() { deque<int> d; for(int i=1;i<10;i++) d.push_back(i); d.clear(); cout<<d.size()<<endl; return 0; }
原文:http://blog.csdn.net/qsyzb/article/details/23565075