C++之queue和deque

1、queue

        queue(队列),一种数据结构,可以让某些数据结构的操作变得简单。队列(queue)最大的特点就是先进先出。就是说先放入queue容器的元素一定是要先出队列之后,比它后进入队列的元素才能够出队列。

函数:

(1)back()        //返回队列中最后一个元素

(2)empty()     //判断队列是否为空

(3)front()       //返回队列中的第一个元素

(4)pop()        //删除队列的第一个元素

(5)push()      //在队列末尾加入一个元素

(6)size()        //返回队列中元素的个数

(7)emplace()   // 在队尾插入一个元素

(8)swap()      //交换两个队列的元素

2、deque

        双端队列(double-ended queue),两端都可以操作、插入、删除、也可以在中间进行操作。内部采用线性表顺序结构,与vector不同的是,deque采用分块的线性存储结构存储数据,每块大小512字节。所有的deque块使用一个Map块进行管理,每个Map数据项纪录各个deque块的首地址。当考虑容器内部的内存分配策略和操作性能时,deque相对于vector更有优势。

函数:

(1)assign(beg, end);  //将[beg,end)区间中的数据拷贝赋值给本身
(2)assign(n,elem);     //将n个elem拷贝赋值给本身
(3)empty();                //判断容器是否为空
(4)size();                   //返回容器中的元素的个数
(5)resize(num);        //重新指定容器的长度为num,若容器变长,则以默认值填充新位置
                                     //如果容器变短,则末尾超出容器长度的元素被删除
(6)resize(num,elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置
                                       //如果容器变短,则末尾超出容器长度的元素被删除
(7)push_back(elem);  //在容器尾部添加一个数据
(8)push_front(elem);  //在容器头部插入一个数据
(9)pop_back();    //删除容器最后一个数据
(10)pop_front();  //删除容器第一个数据
(11)insert(pos,elem);        //在pos位置插入一个elem元素的拷贝,返回新数据的位置
(12)insert(pos,n,elem);    //在pos位置插入n个elem数据,无返回值
(13)insert(pos,beg,end);  //在pos位置插入[beg,end)区间的数据,无返回值
(14)clear();                       //清空容器的所有数据
(15)erase(beg,end);        //删除[beg,end)区间的数据,返回下一个数据的位置
(16)erase(pos);               //删除pos位置的数据,返回下一个数据的位置
(17)at(int idx);                 //返回索引idx所指的数据
(18)operator[];                //返回索引idx所指的数据
(19)front();                      //返回容器中第一个数据元素
(20)back();                      //返回容器中最后一个数据元素

3、示例

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

void print_deque(const deque<int>& d)
{
	cout << "deque: ";
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	for (int i = 0; i < d.size(); i++)
		cout << d[i] << " ";
	cout << endl;
}

int main()
{
	// 队列
	queue<int> q1;
	for (int i = 0; i < 6; i++)
	{
		q1.push(i);
	}
	printf("%d %d\n", q1.front(), q1.back());

	q1.pop();  // 出队首元素 0
	q1.pop();  // 出队首元素 1
	q1.pop();  // 出队首元素 2
	printf("%d %d\n", q1.front(), q1.back());

	if (q1.empty() == true)
		printf("EMPTY! \n");
	else
		printf("NOT EMPTY! \n");


	// 双端队列
	deque<int> q2;
	deque<int> q3(6, 8);
	deque<int> q4(q3.begin() + 2, q3.end());
	deque<int> q5(q3);
	print_deque(q3);
	print_deque(q4);
	print_deque(q5);


	//尾插
	q3.push_back(10);
	q3.push_back(20);
	//头插
	q3.push_front(100);
	q3.push_front(200);
	print_deque(q3);
	//尾删
	q3.pop_back();
	print_deque(q3);
	//头删
	q3.pop_front();
	print_deque(q3);

	q3.insert(q3.begin(), 1000);
	print_deque(q3);

	q3.insert(q3.begin(), 3, 9999);
	print_deque(q3);

	//在d3.begin()的位置,插入区间d2.begin()-d2.end()之间的数
	q3.insert(q3.begin(), q3.begin(), q3.end());
	print_deque(q3);

	//排序
	sort(q3.begin(), q3.end());
	print_deque(q3);

	//删除
	deque<int>::iterator it = q3.begin();
	it++;             //第二个元素
	q3.erase(it);     //q3.erase()为删除所有;  q3.clear()也为清空容器所有数据
	print_deque(q3);

	//按区间方式删除
	q3.erase(q3.begin(), q3.end());
	print_deque(q3);

	return 0;
}

结果为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/425451.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二维码门楼牌管理系统技术服务详解:性能标准与反光膜要求

文章目录 前言一、二维码门楼牌管理系统技术服务的性能要求二、反光膜的性能标准三、制作完成的反光膜表层保护 前言 随着科技的快速发展&#xff0c;二维码门楼牌管理系统在现代化城市管理中扮演着越来越重要的角色。这一系统不仅提高了管理效率&#xff0c;还为市民提供了更…

Autosar Appl介绍

AUTOSAR架构中的应用层 AUTOSAR 应用层构成AUTOSAR 架构中的最顶层,被认为对所有车辆应用至关重要。AUTOSAR 标准使用“组件”概念指定应用层实现。 在谈论应用层实现时,应该考虑的三个最重要的部分是: AUTOSAR 应用软件组件这些组件的 AUTOSAR 端口AUTOSAR 端口接口 AUTOS…

steam++加速问题:出现显示443端口被 vmware-hostd(9860)占用的错误。

目录 前言&#xff1a; 正文&#xff1a; 前言&#xff1a; 使用Steam对GitHub进行加速处理时&#xff0c;建议使用2.8.6版本。 下载地址如下&#xff1a;Release 2.8.6 BeyondDimension/SteamTools GitHub 下载时注意自己的系统位数 正文&#xff1a; 使用GitHub时会使…

任务拆解的艺术

1.任务拆解背后的深层逻辑 任务拆解背后的深层逻辑主要涉及以下几个方面&#xff1a; 分解复杂性&#xff1a; 任务拆解的首要目的是分解复杂的大目标或任务&#xff0c;将其分解成更小、更具体的部分。这种分解有助于减少问题的复杂性&#xff0c;使其更易于理解和解决。通过将…

DC-2靶机详解

写写自己打DC-2的过程 使用工具 kali DC-2的靶机下载地址为&#xff1a;https://www.vulnhub.com/entry/dc-2,311/ 环境配置。 Kali和DC-2都设置为NAT模式&#xff0c;都为仅主机模式也可以。 信息收集 arp-scan -l nmap -sn 192.168.236.0/24 获取靶机ip&#xff1a;192.16…

K8S之Deployment的介绍和使用

Deployment的理论和实操 Deployment控制器&#xff1a;概念、原理解读概述工作原理 编写Deployment资源清单文件使用案例&#xff1a;创建一个web站点Deployment管理pod&#xff1a;扩容、缩容通过deployment管理应用&#xff0c;实现扩容&#xff0c;把副本数变成3通过deploym…

C++重新入门-vector容器

目录 1.动态数组&#xff1a; 2.头文件和命名空间&#xff1a; 3.创建和初始化&#xff1a; 使用默认构造函数创建空的std::vector&#xff1a; 使用初始化列表初始化std::vector&#xff1a; 使用拷贝构造函数&#xff1a; 使用范围构造函数&#xff1a; 使用重复值初…

Tkinter.Text控件中,文本存在某个关键字的将被高亮显示(标记颜色+字体加粗)

在Tkinter的Text控件中&#xff0c;要标记某个关键字并改变其颜色&#xff0c;你可以使用tag_add方法来给包含关键字的文本添加标签&#xff0c;然后使用tag_config方法来配置该标签的显示样式&#xff0c;包括前景色&#xff08;字体颜色&#xff09;和背景色等。以下是一个完…

使用腾讯云go sdk 查询对象存储中最新文件

背景&#xff1a; 腾讯云账号下&#xff0c;有很多对象存储COS桶&#xff1a; 我现在想确认某一个对象存储桶的活跃程度&#xff0c;简单的来说。我想知道这个桶里面最后上传的一个文件是什么&#xff0c;以及它的上传时间戳。 本文将介绍如何使用腾讯云对象存储&#xff08;…

MySQL:开始深入其数据(三)DQL的后续

上一章学习mysql语句里的where和join,这一章我们开始分析group by ,having,order by,limit语句。 three,too,one,go! 文章目录 重温select语法having:order by:limit 重温select语法 SELECT [ALL | DISTINCT] { * | table.* | [ table.field1 [ as alias1] [, table.field2 [a…

【C++干货基地】揭秘C++11常用特性:内联函数 | 范围for | auto自动识别 | nullptr指针空值

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

Dockerfile构建过程详解

Dockerfile介绍 docker是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 1、编写一个dockerfile文件 2、docker build构建成为一个镜像 3、docker run 运行镜像 …

如何在Window系统部署VisualSVN服务并结合cpolar实现无公网ip远程访问

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写&#xff0c;是一个开放源代码的版本控制系统…

mongoDB 优化(1)索引

1、创建复合索引&#xff08;多字段&#xff09; db.collection_test1.createIndex({deletedVersion: 1,param: 1,qrYearMonth: 1},{name: "deletedVersion_1_param_1_qrYearMonth_1",background: true} ); 2、新增索引前&#xff1a; 执行查询&#xff1a; mb.r…

[业务系统]人物坐骑系统介绍I

1.问题描述 旧版本的坐骑系统依赖于人物装备了【法宝】&#xff08;一种装备类型&#xff09;&#xff0c;装备了法宝的人物变拥有了【幻化】坐骑的能力&#xff0c;即在人物装备栏中的【外观】中会有已经幻化和未幻化&#xff08;解锁&#xff09;的坐骑。如果玩家至少幻化一…

【笔试强训错题选择题】Day5.习题(错题)解析

文章目录 前言 错题题目 错题解析 总结 前言 错题题目 1. ​ ​ 2. 3. ​ 4. ​ 5. ​ 错题解析 1. 移位运算符的使用 2. 3. 4. 5. 总结

股票技术指标(包含贪婪指数)

股票技术指标是用于分析股票价格和成交量数据&#xff0c;以便预测未来市场走势的工具。技术分析师使用这些指标来识别市场趋势、价格模式、交易信号和投资机会。技术指标通常基于数学公式&#xff0c;并通常在股票价格图表上以图形形式表示。 技术指标主要分为以下几类&#x…

过于老旧的pytorch_ssim包 请从github下载源码

有些冷门算法真的不要随便pip&#xff0c;有可能下载到史前版本…最好还是找源代码 汗 今天要用到SSIM损失函数&#xff0c;从网上简单看了一下原理就想测试一下&#xff0c;偷了一下懒就直接在命令行输入pip install pytorch_ssim了&#xff0c;结果报了一堆错误&#xff08;汗…

冒泡排序(C语言详解)

原理&#xff1a;从左到右一次比较&#xff0c;如果左侧数字比右侧数字大&#xff08;小&#xff09;&#xff0c;则两数交换&#xff0c;否则比较下一 组数字&#xff0c;每一次大循环比较可以将乱序的最右侧数字改为最大&#xff08;最小&#xff09;&#xff0c…

在springboot项目中调用通义千问api多轮对话并实现流式输出

官网文档 阿里灵积提供了详细的官方文档 如何实现多轮对话 官方文档中提到只需要把每轮对话中返回结果添加到消息管理器中&#xff0c;就可以实现多轮对话。本质上就是将历史对话再次发送给接口。 如何实现流式输出 官方文档中提出使用streamCall()方法就可以实现流式输出&…