1 //deque双端队列容器
2 //deque双端队列容器与vector一样,采用线性表顺序存储结构,但与vector不同的是,
3 //deque采用的分块线性存储结构来存储数据,每块的大小一般为512字节,成为一个deque块
4 //所有deque块使用一个Map块进行管理,每个Map数据项纪录各个deque块的首地址,这样一来,deque的
5 //头部和尾部都可插入和删除元素,而不需移动其他元素 。使用push_back()方法在尾部插入元素,会扩张队列
6 //而使用push_front()方法在首部插入元素和使用insert()方法在中部插入元素,只是将原位置上的元素值覆盖,不会增加新元素
7
8
9 #include<deque>
10 #include<iostream>
11 using namespace std;
12 int main()
13 {
14 //创建没有任何元素的deque对象
15 deque<int> d;
16 //创建具有n个元素的deque对象
17 deque<int> d1(10);
18 //创建具有n个元素的deque对象,并赋初值
19 deque<int> d2(10,8.5);
20 d.push_back(1);
21 d.push_back(2);
22 d.push_back(3);
23 cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
24 //从头部插入元素不会增加新的元素,只将原有的元素覆盖
25 d.push_front(10);
26 d.push_front(20);
27 cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
28 //从中间插入元素,不会增加新元素,只将原有的元素覆盖
29 d.insert(d.begin()+1,88);
30 cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
31 //前向遍历
32 for(int i=0;i<d.size();i++)
33 {
34 cout<<d[i]<<" ";
35 }
36 cout<<endl;
37 //以前向迭代器的方式遍历
38 deque<int>::iterator it;
39 for(it=d.begin();it!=d.end();it++)
40 {
41 cout<<*it<<" ";
42 }
43 cout<<endl;
44 deque<int> d3;
45 d3.push_back(1);
46 d3.push_back(2);
47 d3.push_back(3);
48 d3.push_back(4);
49 d3.push_back(5);
50 d3.pop_front();
51 d3.pop_front();
52 deque<int>::iterator it1;
53 for(it1=d3.begin();it1!=d3.end();it1++)
54 {
55 cout<<*it1<<" ";
56 }
57 cout<<endl;
58 //从尾部删除元素
59 d3.pop_back();
60 for(it1=d3.begin();it1!=d3.end();it1++)
61 {
62 cout<<*it1<<" ";
63 }
64 cout<<endl;
65 d3.erase(d3.begin()+1);
66 for(it1=d3.begin();it1!=d3.end();it1++)
67 {
68 cout<<*it1<<" ";
69 }
70 cout<<endl;
71 d3.clear();
72 cout<<d3.size()<<endl;
73 return 0;
74 }