C++ deque
简介
所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速。而在中间插入元素则会比较费时,因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型,提供了在序列两端快速插入和删除操作的功能,它可以在需要的时候改变自身大小,完成了标准的C++数据结构中队列的所有功能。它不像vector一样把所有对象保存在一个连续的内存块,而是多个连续的内存块。并且在一个映射结构中保存对这些块以及顺序的跟踪。
构造函数:
deque():创建一个空dequedeque(int nSize):创建一个deque,元素个数为nSizedeque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为tdeque(const deque &):复制构造函数
deque大小操作:
deque.size();//返回容器中元素的个数deque.empty();//判断容器是否为空deque.resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。
deque双端插入和删除操作
push_back(elem);//在容器尾部添加一个数据push_front(elem);//在容器头部插入一个数据pop_back();//删除容器最后一个数据pop_front();//删除容器第一个数据
初始化:
#include<iostream>
#include <deque>
using namespace std;
void test()
{deque<int>d;d.push_back(10);d.push_back(40);d.push_back(30);d.push_back(20);deque<int> d2(d.begin(), d.end()); /* 初始化 */d2.push_back(10000);/* 两个双向队列交换 */d.swap(d2);cout << d.back() << endl;
}int main(){test();return 0;
}
输出 10000;
deque数据存取
front();//返回第一个数据。back();//返回最后一个数据
deque插入操作
insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
deque删除操作
clear();//移除容器的所有数据erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。erase(pos);//删除pos位置的数据,返回下一个数据的位置。
可以使用sort算法对deque进行排序
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;void printDeque(const deque<int> &d){//遍历容器for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {cout<< *it <<" ";}cout<<endl;
}/* 回调函数 */
bool compare(int v1 ,int v2){return v1 > v2;//从大到小
}void test(){deque<int> d;d.push_back(3);d.push_back(4);d.push_back(1);d.push_back(7);d.push_back(2);sort(d.begin(), d.end(), compare);printDeque(d);
}int main(){test();return 0;
}
输出的结果为:7 4 3 2 1