Deque介绍:
deque是一个double-ended queue,它具有以下两个特点:
它支持[]操作符,也就是支持随即存取,并且和vector的效率相差无几;
它支持在两端的操作:push_back,push_front,pop_back,pop_front等,并且在两端操作上与list的效率
也差不多。
特点:
顺序容器类,象vector,也支持快速在容器最前面插入和删除操作。
何时选用Deque:
如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。
常用函数:
(1) 构造函数
deque():创建一个空deque
deque(int nSize):创建一个deque,元素个数为nSize
deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t
deque(const deque &):复制构造函数
(2) 增加函数
void push_front(const T& x):双端队列头部增加一个元素X
void push_back(const T& x):双端队列尾部增加一个元素x
iterator insert(iterator it,const T& x):双端队列中某一元素前增加一个元素x
void insert(iterator it,int n,const T& x):双端队列中某一元素前增加n个相同的元素x
void insert(iterator it,const_iterator first,const_iteratorlast):双端队列中某一元素前插入另一个相同类型向量的[forst,last)间的数据
emplace 在deque的指定位置插入一个元素
emplace_back 在deque的最后面插入一个元素
emplace_front 在deque的最前面插入一个元素
(3) 删除函数
Iterator erase(iterator it):删除双端队列中的某一个元素
Iterator erase(iterator first,iterator last):删除双端队列中[first,last)中的元素
void pop_front():删除双端队列中最前一个元素
void pop_back():删除双端队列中最后一个元素
void clear():清除deque中所有的元素
(4) 遍历函数
reference at(int pos):返回pos位置元素的引用
operator[] 返回deque中指定位置元素的引用
reference front():返回手元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回指向向量中最后一个元素下一个元素的指针(不包含在向量中)
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素的前一个元素
(5) 判断函数
bool empty() const:向量是否为空,若true,则向量中无元素
(6) 大小函数
Int size() const:返回向量中元素的个数
resize 更改deque的大小(size)
int max_size() const:返回最大可允许的双端对了元素数量值
shrink_to_fit 更改deque的容量为deque的长度
(7) 其他函数
void swap(deque&):交换两个同类型向量的数据
void assign(int n,const T& x):向量中第n个元素的值设置为x
operator= 使用另一个deque中的元素替换deque中的元素
get_allocator 返回创建deque的Allocator的拷贝
排序算法Sort():
#include <deque>
#include <algorithm>
#include <iostream>
#include <functional>
using namespace std;
bool SortByNum(const int x, const int y)//降序
{
return x > y;
}
int _tmain(int argc, _TCHAR* argv[])
{
deque<int> dequeInt = { 45, 232, 2, 34, 666, 23, 1 };
deque<int>::iterator iterInt;
//less<int> sortFunc;//升序
//greater<int> sortFunc;//降序
//sort(dequeInt.begin(), dequeInt.end(), sortFunc);
sort(dequeInt.begin(), dequeInt.end(), SortByNum);
int iIndex = 0;
for (iterInt = dequeInt.begin(); iterInt != dequeInt.end(); iterInt++ )
cout << dequeInt[iIndex++] << endl;
return 0;
}