C++容器适配器1-基本使用(stack、queue)

news2025/2/28 12:02:42

###适配器意思是可以将一种不能用于某种场景的东西经过特殊转换,包装成一个新东西,这个新定西可以用于这个场景,并且还具有之前旧东西的功能作用;

stack、queue就是C++里面的容器适配器,这两个适配器堆vector和list两个容器进行了包装,具有vector和list的特性;

deque相当于一个缝合怪,具有list和vector的特性,所以在标准库中,stack和queue都是将deque作为包装的缺省类型,至于怎么包装的,后续介绍,现在只用记得deque具有vector和list的各有的特性。

一、stack

栈先进后出,它的结构就像羽毛球同,它的数据就是羽毛球筒里面的羽毛球,先放进去的要最后才能取出来,后放进去的先去出来。

栈是一个类模板,模板参数T是它的数据类型,Container是stack包装的容器的具体类型,传过来的是什么就是上面,例如,传过来的是vector<int>,那么Container就是这个容器适配器适配的容器,也就是vector;默认缺省类型给deque<T>,是因为它能兼具vector和list。

头文件是<stack>

可适配list,vector、deque;

1、初始化

这个ctnr代表的是容器; 

stack的初始化很简单,只有两种:第一种是不给初始化的具体值,那么就是空的;第二种就是给特定的容器,并且容器里面有数据,那么此时的stack初始化之后就是这个容器里面的数据;

###代码演示:

int main()
{
	deque<int> dq(10, 9);
	list<int> lt(10, 1);//这里也可以用 vector 演示
	
	stack<int, list<int>> st1(lt);

	stack<int> st2;//第二个模板参数就是 deque<int>
	
	return 0;
}

 2、其他常用接口

void test01()
{
	srand((unsigned int)time(nullptr));
	vector<int> vt;
	for (int i = 0; i < 10; i++)
	{
		int data = rand() % 100 + 1;
		vt.push_back(data);
	}
	for (auto& it : vt)
	{
		cout << it << ' ';
	}
	cout << endl;

	stack<int, vector<int>> st(vt);
	while (!st.empty())//判空
	{
		cout << st.top() << " ";//栈顶,也就是最后插入的数据
		st.pop();//删除栈顶,更新栈顶元素
	}
	cout << endl;
	//判空
	cout << st.empty() << endl;
	//大小
	cout << st.size() << endl;
	//往栈顶插入元素
	for (int i = 1; i <= 10; i++)
	{
		st.push(i);
	}
	//打印观察
	while (!st.empty())
	{
		cout << st.top() << " ";
		st.pop();
	}
}


二、queue

queue就是队列,先进先出,和人排队一样,先排队的人先出去队列,后面的后出;

 其他和stack一样;区别是接口的不同;

还有一点,这个适配器不适配vector,因为这个适配器实现时底层用了pop_front函数,但是vector容器没有这个接口,list和deque有;

list有push_back、push_front、pop_back、pop_front;

vector有push_back、pop_back;

1、初始化

和stack一样的两种初始化,注意不能用vector; 

2、其他常用接口

 

void test02()
{
	list<int> vt;
	for (int i = 1; i <= 10; i++)
	{
		vt.push_back(i);
	}
	queue<int, list<int>> q(vt);
	//判空
	cout <<"是否为空:"<< q.empty() << endl;
	//大小
	cout <<"队列大小:"<< q.size() << endl;
	//对头和队尾的元素
	cout <<"队头数据:"<< q.front() << endl;
	cout <<"队尾数据:"<< q.back() << endl;
	//队尾进数据
	q.push(99);
	cout << "队尾数据:" << q.back() << endl;
	//队头出数据
	q.pop();
	cout << "队头数据:" << q.front() << endl;
}

emplace就是在队尾插入数据,swap就是交换两个队列;


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端进阶之路:推荐几本不可错过的前端开发书籍

前端开发是一个不断更新换代的领域&#xff0c;作为一名前端工程师&#xff0c;持续学习和提升自己是至关重要的。阅读专业书籍是系统学习前端知识的一种有效方式。以下是一些前端开发者不可错过的书籍推荐&#xff0c;帮助你巩固基础&#xff0c;拓宽视野&#xff0c;成为更优…

【进阶OpenCV】 (13)--视频物体跟踪

文章目录 物体跟踪一、跟踪器二、代码实现1. 创建CSRT跟踪器实例2. 打开视频文件3. 主循环3.1 读取每一帧3.2 设置跟踪目标3.3 更新跟踪器&#xff0c;获取对象位置3.4 显示视频每一帧 4. 释放资源和关闭窗口5. 完整代码展示 总结 物体跟踪 本篇我们来介绍&#xff0c;如何对移…

Nvidia Jetson Orin平台部署CenterPoint模型

最近尝试将CenterPoint模型部署到Orin平台,网络上教程很多,也很杂乱,于是便整理一版自用。 主要根据NVIDIA Lidar AI Solution进行复现。并在此基础上进行补充 Orin平台: python:3.8 CUDA:11.4 torch:1.14.0 torchvision:0.15.1 TensorRT: 8.5.2.1 在Compile &&a…

第十九篇——复盘:数学给了我什么启示?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 数学带给这个世界什么&#xff1f;数学在我们的人生路上意味着什么&#…

Arthas 介绍,阿里开源线上JVM性能监控工具

1.官网 https://arthas.aliyun.com/ arthas (aliyun.com) Arthas 是一款由阿里巴巴开发并开源的 Java 应用诊断工具&#xff0c;主要用于帮助开发人员实时监控、诊断和调优 Java 应用程序。这款工具对于处理复杂的生产环境问题特别有效&#xff0c;尤其在定位那些难以复现的…

面网易后台开发居然遇到了一个困难难度算法题

在提供面经的同学中&#xff0c;竟然有同学在面试网易后台研发的时候遇到了一道困难难度的算法题。 一般来说&#xff0c;大多数面试的算法题都是以中等难度为主&#xff0c;遇到困难难度的算法题也许是公司现在不缺人、也许是在选拔人才、当然也很可能是面试官其实并不想要你…

基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

【WRF工具】服务器上安装convert_geotiff

【WRF工具】服务器上安装convert_geotiff convert_geotiff简介方法1&#xff1a;下载安装包后下载convert_geotiff依赖库安装库1&#xff1a;libtiff库2&#xff1a;sqlite库3&#xff1a;curl库4&#xff1a;projcmake更新&#xff08;可选&#xff09;库5&#xff1a;geotiff…

mysql--表的约束

目录 理解表的约束和操作 如何理解&#xff1f; 1、空属性null 2、默认值default 3、列描述comment 4、自动填充zorefill 5、主键primary key &#xff08;1&#xff09;创建表时指定可以 &#xff08;2&#xff09;创建表后指定key &#xff08;3&#xff09;删除主…

Cocos Creator导出obj文件用于后端寻路

Cocos Creator 3.8.0 用这个扩展插件 【杨宗宝】两年前写的网格工具&#xff0c;今天将它开源了。 - Creator 3.x - Cocos中文社区carlosyzy_extensions_mesh: Cocos Creator 3.x mesh插件&#xff0c;负责网格数据的导出。合并&#xff0c;拆封等一系列操作 (gitee.com) 下…

Avalonia开发实践(四)——关于Setter优先级的问题

首先看一段样例代码&#xff1a; <StackPanel Orientation"Horizontal" Spacing"50" HorizontalAlignment"Center"><StackPanel.Styles><Style Selector"Button.default"><Setter Property"Background&quo…

健身俱乐部预约报名系统

这个是我新开发搭建的健身俱乐部行业的预约报名系统。 首页 焦点图大图展示 右侧联系栏目 关于我们 底部版权信息 在线咨询 一键拨号 添加微信 转发分享 预约来校 专业资质 室内环境相册 教练名片列表 教练名片详情 关于我 联系我 分享给好友 课程介绍 保存到通讯录 行业新闻 …

Vue3概述

1. Vue3概述 1.1 Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece。 1.2 vite简介 vite是新一代前端构建工具&#xff0c;官网地址&#xff1a;Vite中文网。 1.3 Vue2和Vue3区别 Vue2的API设计是Options&#xff08;配置&…

模拟设计工程师必知必会:一文讲透PLL学习重点

在模拟设计中&#xff0c;相位锁定环&#xff08;PLL&#xff09;是一种极其重要的技术。它在频率合成、时钟恢复、数据同步等多个方面发挥着关键作用。作为一名模拟设计工程师&#xff0c;对PLL的深入理解和熟练应用是必不可少的。本文将通过移知公开课《模拟设计工程师必知必…

QD1-P32 CSS 边框属性(3)padding(元素的内边距)

本节学习&#xff1a;CSS padding属性&#xff08;元素的内边距&#xff09; 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p32 ‍ padding 属性的用途 ​​ ‍ 在CSS中&#xff0c;padding​ 属性用于设置元素内部的空间&#xff0c;即在元素内容和其边界&…

用html、css和js来实现冒泡排序

效果图如下 代码如下 <meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>冒泡排序动画</title><style>body {display: flex;flex-direction: column;justify-con…

【Redis】zset有序集合的常见命令

zset是一个有序集合&#xff0c;有着set的特点&#xff0c;还引入了排序。每个元素额外会有一个分数(score)&#xff0c;元素不可重复&#xff0c;但是分数可以重复。排序以分数为主&#xff0c;如果分数相同&#xff0c;则按元素字典序。 推荐启动服务器时使用该命令&#x…

并发编程-CompletableFuture

并发编程-CompletableFuture 本篇主要讲述 JDK1.8 里面 CompletableFuture 的原理与源码分析。这一篇暂且作为整个章节的最后一篇(若有时间继承增加关于并发编程的其他内容)。闲话少叙&#xff0c;进入正题。在深入了解 CompletableFuture 之前我们先要看一下 Future&Call…

给自己气笑了

正如你所见这是AC代码&#xff0c;我也一直坚信&#xff0c;我调了一个早上一直给我报语法错误 我今天一直在想这个问题&#xff0c;为什么会语法错误&#xff0c;我想了很多很多&#xff0c;军训的时候我一直在想这个事情。 因为我坚信我的逻辑是正确的&#xff0c;不调出来…

JFinalcms代码审计

JFinalCms是开源免费的JAVA企业网站开发建设管理系统&#xff0c;极速开发&#xff0c;动态添加字段&#xff0c;自定义标签&#xff0c;动态创建数据库表并crud数据&#xff0c;数据库备份、还原&#xff0c;动态添加站点(多站点功能)&#xff0c;一键生成模板代码。 环境布置…