简述
deque和vector一样,采用线性表顺序存储结构(意味着可以随机访问),但与vector唯一不同的是,deque采用分块的线性存储结构来存储数据,每块的大小一般为512字节,称为一个deque块,所有的deque块使用一个Map块进行管理,每个Map数据项纪录各个deque块的首地址。这样一来,deque块在头部和尾部都可以插入和删除元素,而不需要移动其他元素。
一般来说,当考虑到容器的内存分配策略和操作性能时,deque相对于vector更有优势。
头文件
#include<deque>
对象创建
deque<int> dq; //创建没有任何元素的deque对像
deque<int> dq(10); //创建具有10整型元素的deque对象,每个元素都为0
deque<int> dq(10,8); //创建具有10双整型元素的deque对象,每个元素都为8
元素插入
dq.push_back(10); //从尾部插入元素,会不断扩张队列
dq.push_front(11); //从头部插入元素,不会增加新元素,只讲原有元素覆盖
dq.insert(dq.begin()+5,6); //从任意位置插入元素,不会增加新元素,只讲原有元素覆盖
dq[7]=999; //对元素重新赋值
注:只有 push_back() 才是真正的插入、添加,会改变队列长度,其他的都只是对旧元素更改、覆盖。
元素删除
dq.pop_front(); //从头部删除元素
dq.pop_back(); //从尾部删除元素
dq.erase(dq.begin()+2); //从任意位置删除元素 ,形参为迭代器
dq.clear(); //清空元素
元素遍历
deque<int>::iterator it; //迭代器遍历
for(it=dq.begin();it!=dq.end();it++)
cout<<*it<<" ";
deque<int>::reverse_iterator rit; //迭代器反向遍历
for(rit=dq.rbegin();rit!=dq.rend();rit++)
cout<<*rit<<" ";
int i; //下标遍历
for(i=0;i<dq.size();i++)
cout<<dq[i]<<" ";
总结
由于deque与vector的操作基本上是一样的,所以没有详细讲述,如果有不懂得可以参考STL—vector详解。