容器(三):队列容器Deque

本文详细介绍了Deque容器的特点和使用场景,包括其构造、增删操作、遍历及判断等常用函数,并提供了一个排序算法的具体实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


Deque常用方法介绍的参考连接: http://www.howsoftworks.net/cplusplus.api/std/indexdeque.html








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值