deque是双向开口的连续内存空间(动态将多个连续空间通过指针数组接合在一起),随时可以增加一段新的空间。
deque 的最大任务就是在这些分段的连续空间上,维护其整体连续的假象,并提供随机存取的接口。
特点
1. 一旦要在 deque 的头部和尾部增加新空间,便配置一段定量连续空间,串在整个 deque的头部或尾部,因此不论在头部或尾部插入元素都十分迅速。 (优点)
2. 在中间部分安插元素则比较费时,因为必须移动其它元素。(缺点)
3. deque 是 list 和 vector 的折中方案。兼有 list 的优点,也有 vector 随机访问效率高的优点。
总结:支持随机访问,但效率没有 vector 高,在头部和尾部插入或删除效率高,但在中间插入或删除效率低。
示例源码:
// Len_stl.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <queue>
using namespace std;
int main()
{
deque<int> que;
for (int i = 0; i < 6; i++)
{
que.push_back(i);
}
// 遍历
printf("\n\n遍历: ");
for (int i = 0; i < que.size(); i++)
{
printf("%d ", que[i]);
}
// 从头部出栈
que.pop_front();
printf("\n\n头部出栈后,遍历: ");
for (int i = 0; i < que.size(); i++)
{
printf("%d ", que[i]);
}
// 从尾部出栈
que.pop_back();
printf("\n\n尾部出栈后,遍历: ");
for (int i = 0; i < que.size(); i++)
{
printf("%d ", que[i]);
}
// 头部插入
que.insert(que.begin(), {111,222,333});
printf("\n\n头部插入111,222,333后,遍历: ");
for (int i = 0; i < que.size(); i++)
{
printf("%d ", que[i]);
}
// 尾部插入
que.insert(que.end(), { 777,888,999 });
printf("\n\n尾部插入777,888,999后,遍历: ");
for (int i = 0; i < que.size(); i++)
{
printf("%d ", que[i]);
}
// 尾部插入
que.push_back( 444);
printf("\n\n尾部插入444后,遍历: ");
for (int i = 0; i < que.size(); i++)
{
printf("%d ", que[i]);
}
// 删除中间所有值
que.erase(que.begin()+1, que.end()-1);
printf("\n\n删除中间值后,遍历: ");
for (int i = 0; i < que.size(); i++)
{
printf("%d ", que[i]);
}
return 0;
}
执行结果: