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 }