stack和queue的模拟实现和实现中遇见的一问题C++

C#面试题及详细答案120道(61-75)-- 多线程与异步 本文摘要了前后端面试题中关于线程与并发的核心知识点,包括线程与进程的区别(61题)、Thread/ThreadPool/Task的对比(62题)、线程安全实现方法(63题)、lock关键字的原理(64题)、Monitor类的进阶用法(65题)以及死锁的成因与避免(66题)。通过C#代码示例和表格对比,清晰展示了多线程编程的关键概念、应用场景及常见问题解决方案,适合开发者快速掌握面试高频考点。完整内容可访问专栏目录获取更多技术面试题解析。 阅读详情

1.适配器

1.什么是适配器

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。

对于stack我们可以使用适配器使得其中的val可以为任何值
例如:

vector
string
list

2.缺省值

引入:
我们在正常调用stack时,我们是:

stack<int> s;

但是我们实现的是:

template<class T, class Container>

需要两个参数,所以我们需要使用缺省值

解决:

template<class T, class Container = deque<T>>
//deque双端队列

3.当第二个参数是一些别的容器的时候

例如:
forward_list单链表
尾插尾删是没有的,所以不能适配

即:
给的容器必须支持这些函数才能使用,否则,,,

4.简单介绍deque

deque:双端队列
不是队列。因为队列是要有先进先出的,所以他不是传统队列
双端:双端开口,他想融和list和vector的一个全新容器,并有一种替代他们两个的趋势

deque和别的容器进行相比的优点:
vector:扩容代价不大,不需要拷贝数据浪费空间少
list:cpu告诉cache命中,其次不会频繁申请小块空间,申请和释放空间次数少代价低
queue:cpu告诉cache命中,其次不会频繁申请小块空间,申请和释放空间次数少代价低
所以:deque作为stack和queue的默认容器是完胜的

总结:
deque适合头尾插入删除,但是中间插入删除,和随机访问效率都不是很好,所以要高频随机访问还是需要vector,任意位置的插入和删除还是需要list

5.代码:

queue.h

#pragma once
#include<vector>
#include<list>

namespace sakeww
{
	// stack<int, vector<int>> s;
	// stack<int, list<int>> s;

	template<class T, class Container = deque<T>>
	class queue
	{
	public:
		bool empty() const
		{
			return _con.empty();
		}

		size_t size() const
		{
			return _con.size();
		}

		const T& front() const
		{
			return _con.front();
		}

		const T& back() const
		{
			return _con.back();
		}

		void push(const T& x)
		{
			_con.push_back(x);
		}

		void pop()
		{
			_con.pop_front();
		}
	private:
		Container _con;
	};

	void test_queue()
	{
		//queue<int, vector<int>> q; //不支持pop和front
		//queue<int, list<int>> q;
		queue<int> q;
		q.push(1);
		q.push(2);
		q.push(3);
		q.push(4);

		while (!q.empty())
		{
			cout << q.front() << " ";
			q.pop();
		}
		cout << endl;
	}
}

stack.h

#pragma once
#include<vector>
#include<list>
#include<forward_list>//单链表 


// 适配器模式
namespace sakeww
{
	// stack<int, vector<int>> s;
	// stack<int, list<int>> s;

	//Container容器
	template<class T, class Container = deque<T>>
	class stack
	{
	public:
		bool empty() const
		{
			return _con.empty();
		}

		size_t size() const
		{
			return _con.size();
		}

		const T& top() const
		{
			return _con.back();
		}

		void push(const T& x)
		{
			_con.push_back(x);
		}

		void pop()
		{
			_con.pop_back();
		}
	private:
		//vector<T> _v;
		Container _con;
	};

	void test_stack()
	{
		// 后进先出 -- 不支持迭代器
		//stack<int, std::vector<int>> s;
		//stack<int, std::list<int>> s;
		stack<int> s;

		//stack<int, std::forward_list<int>> s;
		//stack<int, string> s;
		//stack<string, string> st;
		//st.push("11111");

		s.push(1);
		s.push(2);
		s.push(3);
		s.push(400);

		while (!s.empty())
		{
			cout << s.top() << " ";
			s.pop();
		}
		cout << endl;
	}
}
为什么 CL_DEMO_OUTPUT 不能用于生产用途:不仅是 demo 标签那么简单 摘要:CL_DEMO_OUTPUT 虽能快速展示ABAP数据,但存在严重生产风险:1) 官方定位为示例工具,不承诺兼容性与支持;2) 非Released API,云环境直接不可用;3) 依赖SAP GUI,缺乏日志关键特性;4) 存在版本漂移、类型限制、性能隐患及安全缺口。典型事故案例包括后台Job崩溃、Gateway链路污染和云迁移失败。生产环境应改用结构化日志(如SLG1)或稳定API输出,避免将调试工具误作工程方案。(149字) 阅读详情

相关推荐

基于vivado实现FFT/IFFT

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、实现的功能二、配置1.调用DDS的IP核2.调用FFT的IP核三、结果分析1.调用DDS的IP核2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、实现的功能 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任

qq_45600102的博客 1万+

C++之stack 和 queue

在数据结构部分我们通过C实现了栈和队列,本节我们将了解C++版本下的stack和queue。我们将会很轻松的学习这部分知识。后进先出1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元 素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供 一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。

2302_79376097的博客 1946

别再到处找包了!Keil5芯片支持包(Pack)最全管理指南:安装、更新、迁移与离线备份

本文详细解析了Keil5芯片支持包(Pack)的全生命周期管理,包括安装、更新、迁移与离线备份的工程化解决方案。针对STM32F10x等常见芯片,提供了高效获取Pack的策略、版本管理技巧及团队协作方案,帮助开发者解决常见的'Device Family Pack missing'等问题,提升嵌入式开发效率。

weixin_28729205的博客 540

【C++】stack and queue的介绍和模拟实现

一. stack的介绍和模拟实现 1. stack的介绍 2. stack的常用接口 3 stack的模拟实现 二. queue的介绍和使用 1. queue的介绍 2. queue的常用接口 3 queue的模拟实现

2303_80737493的博客 2237

从零构建锂电池主动均衡系统:Simulink仿真中的Buck-Boost拓扑实战指南

本文详细介绍了如何在Simulink中从零构建基于Buck-Boost拓扑的锂电池主动均衡系统。通过仿真环境搭建、参数优化、控制策略设计和性能评估,为工程师提供了完整的实战指南,帮助快速验证和优化均衡算法,提升电池组一致性与寿命。

gitlab7runner的博客 896

软件测试面试题汇总

软件测试面试题汇总 测试技术面试题 ........................................................................................................................................................................ 5 1、什么是兼容

晴天的专栏 2万+

【C++】stack与queue的使用与模拟实现

本文介绍了C++ STL中的stack和queue容器适配器,对比了它们与普通容器的区别。文章首先通过示例代码展示stack的基本用法,包括push、pop、top等操作,并给出LeetCode「用栈实现队列」的解题代码。接着详细讲解了如何用vector和list分别模拟实现stack和queue,重点分析了queue选用list而非vector作为底层容器的原因(时间复杂度考量)。最后指出STL中实际使用deque作为底层容器,为后续文章埋下伏笔。全文强调多练习使用STL组件的重要性,并提供了相关学习资源

suxi_na的博客 3177

MTK平台LCD驱动开发实战:从零开始点亮你的Android屏幕

本文详细介绍了在MTK平台进行Android LCD驱动开发的完整流程。从理解LK与Kernel双核驱动框架入手,手把手讲解驱动结构体、屏幕参数配置、初始化序列编写以及PLL_CLOCK计算等核心步骤,并提供了系统集成配置与实用的调试避坑指南,帮助开发者高效点亮新屏幕。

terraform7cloud的博客 292

C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理

一、C++stack的介绍和使用;二、C++queue的介绍和使用;3.1 deque的简单介绍(了解)、3.2 deque的缺陷、3.3 为什么选择deque作为stack和queue的底层默认容器四、priority_queue的介绍和实现 4.1 priority_queue的介绍 4.1 priority_queue的介绍增删查改模拟实现 前言 4.1.1 push() 4.1.2 pop() 4.3 top()、size()、empty() 4.1 priority_queue(优先级队列)增删查

Zhenyu_Coder的博客 4534

海康读码器上位机开发避坑指南:IDMVS客户端之外,如何用C# SDK搞定扫码、数据比对与实时控制?

本文详细介绍了如何利用海康读码器的C# SDK进行二次开发,实现从基础扫码到复杂工业控制的全流程解决方案。内容涵盖SDK架构解析、多设备管理系统构建、业务逻辑与设备控制实现,以及系统集成与性能优化等关键环节,为工业自动化领域的开发者提供实用指南。

weixin_30642561的博客 550

unity6000.0.3版本URP下ScriptableRendererFeature如何实现一张自定义贴图效果?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 584

【C++】stack和queue

本文介绍 C++ 中的 stack、queue 和 priority_queue。stack 模拟数据结构栈,有常用接口如 push、pop 等,底层默认容器为 deque。queue 模拟队列,先进先出,底层也可用 deque,介绍了 deque 的原理、优势缺陷及为何作为 stack 和 queue 底层容器。priority_queue 本质是堆,默认大堆,可通过仿函数控制大小堆及自定义类型比较,展示了在 OJ 中的用法和模拟实现,通过对 vector 封装和堆排序算法实现。

2401_82610555的博客 2636

【Qt】QtCreator远程部署、调试程序

1)QtCreator 工具–> 选项 --> 设备 --> 添加2)设备设置向导选择–> Generic Linux Device --> 开启向导3)填写“标识配置的名称”(随便写)、设备IP、用户名 --> 下一步4)选择配对秘密文件,第一次配对,可以不填写,点击“下一步”5)点击“完成”6)设备添加成功,需要再配置SSH端口号、用户名、密码等7)保存SSH登陆密码:验证类型选择默认“Default”–> “创建新密钥”–> “Test”

郭老二 5193

C++《stack与queue》

在之前的章节我们学习了C++当中string、vector和list三种容器并且试着模拟实现这三种容器,那么接下来在本篇当中我们将STL当中的stack和queue,并且在学习stack和queue的使用之后和之前一样还会试着模拟实现stck和queue。在此我们还要了解到stack和queue是一种容器适配器,那么在这之前就要了解容器适配器是什么。最后我们还要了解一种双端队列的容器,并且分析其与vector和list的区别,那么接下来就开始本篇的学习吧!

mljy.博客 2054

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++:模拟实现stack、queue

带你模拟实现stcak和queue

HZzzzzLu的博客 1640

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【stack和queue的模拟实现】—— 我与C++的不解之缘(十五)

​stack和queue使用起来都非常简单,现在来模拟实现一下,理解其底层的原理。​ 在实现之前,应该知道,stack和queue都是容器适配器,通过看官网文件也可以看出来;其默认的容器都是deque(双端队列)。stack和queue都是在容器的基础上进行了封装,实现了各自的操作。(在下面的实现中stack默认容器用vectorqueue默认容器用list。

LH__1314的博客 6476

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【C++】stack和queue的模拟实现 && 双端队列deque的介绍

本篇博客的主要内容:STL库中stack和queue的模拟实现以及deque的介绍。这部分是名副其实的奖励内容了,stack和queue作为容器适配器,是基于一些容器实现(如:vector,list以及deque)。内部结构实现起来很容易,但是需要多多关注模板的一些使用。deque作为容器,也被我们叫做双端队列,常用作栈和队列的底层适配容器。

2303_79329831的博客 2159

【C++】stack和queue的使用及模拟实现

本篇内容到这里就结束了,主要讲了stack和queue的使用和模拟实现以及deque容器和优先级队列,希望对大家有所帮助,祝大家天天开心!

春风不语。 858

【C++】STL详解(八)—stack和queue的模拟实现

本文介绍了C++ STL中stack和queue的模拟实现。stack和queue是容器适配器,基于顺序容器(如deque)封装而成,提供特定数据操作接口。stack遵循后进先出(LIFO)原则,queue遵循先进先出(FIFO)原则。文章详细讲解了它们的核心函数实现,包括push、pop、top、size、empty和swap等操作,并提供了完整的代码示例。通过底层容器适配,stack和queue保持了高效性与灵活性,适用于多种算法场景。

qq_2778465975的博客 1万+

【STL】stack、queue基本使用和模拟实现

stack 和 queue 又被称为容器配接器,在底层实现方面与我们传统想法又大有不同,今天揭开其神秘的面纱,一起来学习吧✨✨

Lin_Alpaca的博客 1327

C++初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现

1.stack的初步介绍 2.stack的使用 3.queue的初步介绍 4.queue的使用 5.容器适配器 5.1含义 5.2STL标准库中stack和queue的底层结构 6模拟stack和queue 文件规划和一览 6.1模拟stack (stack.h) 6.2模拟queue (queue.h)

qq_74415153的博客 2388

[C++]:stack和queue模拟实现

stack和queue

2301_80418172的博客 1222

stack和queue的模拟实现

通过对 C++ 中 stack 和 queue 的模拟实现,我们深入了解了容器适配器的工作原理和优势。这些适配器通过封装底层容器,提供了简洁而统一的接口,使得数据结构的操作变得更加直观和便捷。我们的模拟实现展示了如何利用已有的容器类来构建自定义的数据结构,同时也强调了代码复用和隐藏实现细节的重要性。在实际开发中,选择合适的数据结构和容器适配器能够显著提升代码的可读性、可维护性和性能。因此,熟练掌握和灵活运用这些基础工具,是每一个 C++ 开发者必备的技能。

2301_79969994的博客 1858

C++——stack与queue

《C++——stack与queue》 求点赞收藏评论关注!!! 十分感谢各位大佬的支持!!!

2301_80401288的博客 1852

【C++】stack、queue和priority_queue的模拟实现

在本篇文章中,讲解了stack和queue以及priority_queue的实现详解

EWIAW_ilove的博客 947

【c++丨STL】stack和queue的使用及模拟实现

与vector、list这些容器不同,stack和queue被称作容器适配器。所谓容器适配器,就是指在一种已有的容器基础上,为其添加了一些新的特性或者功能,目的是使一事物的行为类似于另一类事物。比如说栈这一数据结构,它的本质其实就是对顺序表或者链表的功能进行了一些限制,例如无法遍历、只能在一端进出数据等,但其底层仍然是顺序结构或是链式结构。STL在设计stack和queue时,并没有从零开始构建它们的底层结构,而是采用了这种设计思想,对现有容器进行了封装,从而实现了它们。

2301_80955819的博客 1740
上一篇: List的模拟实现和实现中遇见的一些问题C++
下一篇: leetcode2028.找出缺失的观测数据C++(难点和易错点分析)
sakeww
博客等级 码龄7年 521粉丝 241原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值