STL容器与算法 (六)C++ Deque双端队列知识点

C++ deque双端队列

deque,全名double-ended queue是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

deque与vector、list

1.内存比较
vector:连续空间
list :不连续空间
duque : 段连续空间
在这里插入图片描述
2.功能比较
vector:

  • 随机位置的插入和删除效率比较低
  • 随即访问的效率高(下标运算)
  • 不支持头添加,支持尾添加

list:

  • 随机位置的插入和删除效率高
  • 不支持随机访问
  • 支持头添加,支持尾添加

deque:

  • 随机位置的插入和删除效率不高(以512个字节为一个单位量)
  • 支持随机访问【比vector慢,因为要做堆跳转】,迭代器的结构较为复杂,会降低访问效率
  • 支持头添加,支持尾添加

3.使用选择

  • 随机访问操作频率高,就选用vector
  • 插入删除频率高,头尾添加,就选用list
  • 随机访问+头添加,就选deque

4.与vector函数对比
没有了capacity和reserve,其他均一样。


在这里插入图片描述


头文件

#include<iostream>
#include<deque>
using namespace std; 

定义

void DequeDefine()
{
   
	
	deque<int> dq;  //定义int型双端队列 
	deque<string> dq1;//定义string型队列 
	deque<char> dq2;// 定义char型队列 
//	struct STU{
   
//		int age;
//		int y;
//	};
//	deque<struct STU> dq3;   //定义结构型队列
	
}

构造函数

语法: deque();

deque( size_type size );
deque( size_type num, const TYPE &val );
deque( const deque &from );
deque( input_iterator start, input_iterator end );

C++ Deques能用以下方式创建:

  • 无参,创建一个空双向队列
  • size - 创建一个大小为size的双向队列
  • num and val - 放置num个val的拷贝到队列中,
  • from - 从from创建一个内容一样的双向队列
  • start 和 end - 创建一个队列,保存从start到end的元素。
	deque<int> dq;//空的队列,不能输出 
	deque<int> dq1(3);//大小为3 的空队列 
	deque<int> dq2(3,12);//三个队列均为12 
	deque<int> dq3(dq2);//复制dq2//参数类型要相同 
	
	for_each(dq1.begin(), dq1.end(), fun);   
	 //for_each()使用需加#include<algorithm>头文件
	for_each(dq2.begin(), dq2.end(), fun);
	for_each(dq3.begin(), dq3.end(), fun);
	
	//用迭代器初始化 
	deque<int>::iterator ite = dq2.begin();//指向dq的头 
	deque<int>::iterator ite1 = dq2.end(); //指向dq的尾 
	deque<int> dq4(ite, ite1);	
	
	for_each(dq4.begin(), dq4.end(), fun);

输出结果:
在这里插入图片描述


属性

大小

  • size()返回元素个数

语法:

size_type size();

size()函数返回双向队列中的元素个数。

  • resize()改变双向队列大小

语法:

void resize( size_type num, TYPE val );

resize()改变双向队列的大小为num,另加入的元素都被填充为val。

  • empty() 判断是否为空

语法:

bool empty();

empty()返回真如果双向队列为空,否则返回假。

deque<int> dq;
	cout << dq.size() << endl;
	deque<int> dq1(3);
	cout << dq1.size() << endl;
	
	dq1.push_front(1);  //在deque的头部加一个元素 
	cout << dq1.size() << endl;
	dq1.push_back(1);  // 在deque的尾部加一个元素 
	cout << dq1.size() << endl;
	
	cout << dq.empty() << endl;
	cout << dq1.empty() << endl; 
	
	dq.resize(1);
	cout << dq.size() << endl;
	dq1.resize(2);  // 将dq1的大小缩小为2 
	cout << dq1.size() << endl;
	dq1.resize(5);  // 将dq1的大小扩大为5 
	cout << dq1.size() << endl;

输出结果为:
在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值