stack的简单实现

stack的简单实现

  • 适配器模式
  • stack的实现
    • 代码实现
  • 为什么没有迭代器的实现?
  • 实际默认容器是deque(了解即可)
    • deque
    • deque的优缺点
  • 谢谢观看

适配器模式

stack和我们之前学的list 和 vector 不一样采用的适配器模式
什么叫适配器呢?我们常见的电源适配器就是把220v的高电压转到电器能承受的电压,起转化的作用
模式就是人们之前总结的经验,模板

stack的实现

stack的实现也是借助list,vector等实现的。

代码实现

#pragma once
#include<vector>
#include<iostream>
using namespace std;
namespace bit 
{
	template<class T, class Container = vector<T>>
	//typedef Container con;
	class stack 
	{
	public:
		void push(const T& x) {
			_con.push_back(x);
		}
		T& top() {
			return _con.back();
		}
		void pop() {
			_con.pop_back();
		}
		size_t size() {
			return _con.size();
		}
		bool empty() {
			return _con.empty();
		}

	private:
		Container _con;
	};
}

为什么没有迭代器的实现?

因为栈规定先进后出,所以不提供顺序遍历的迭代器!

实际默认容器是deque(了解即可)

deque

deque 它集合了vector 和 list的优点是一种双开口的"连续"空间的数据结构。
deque并不是真正连续的空间,而是由一段段连续的小空间(buff)拼接而成的,实际deque类似于一个动态的二维
数组,其底层结构如下图所示:
在这里插入图片描述
它的插入是中控指针数组 从中间往两边开空间放值
每个数组的大小N
定位第i个数组数据:

  • 当头部数组满时:
    第几个数组:第i个buff i /N,数组中第几个: i %N

  • 当头部没满时:
    先 i -= 第一数组中元素的个数 然后就和 第一种情况一样了。

deque的优缺点

优点:头插和尾插效率高
缺点:中间删除会很麻烦,有两种解决方案从删除位置后所有数组的元素都先前移动一个位置,后面元素越多越麻烦。另一种方法是记录每一个数组的大小,数组的大小可以不一样了,只需要移动pos位置所在的数组即可。但是这样定位第i个元素又很麻烦了。
其次随机访问效率不高。
把数据拷贝到vector中排序都比直接用deque排序快

谢谢观看

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

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

相关文章

【前端Vue】Vue3+Pinia小兔鲜电商项目第5篇:整体认识和路由配置,本资源由 收集整理【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;认识Vue3&#xff0c;使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…

LinkedHashMap 是如何保证返回的顺序性的?

LinkedHashMap 源码阅读 public class LinkedHashMap<K,V>extends HashMap<K,V>implements Map<K,V>先来看一下 LinkedHashMap 的继承关系&#xff0c;它继承了 HashMap&#xff0c;并且实现了 Map 接口。 LinkedHashMap 底层是 数组 链表 的形式&#xf…

Eland上传bge-base-zh-v1.5向量化模型到ElasticSearch中

最近需要做一些向量检索&#xff0c;试试ES 一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 本地单机环境&#xff0c;无集群&#xff0c;也不基于Docker BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应…

RK3588平台开发系列讲解(GMAC delay开发篇)

目录 RGMII Delayline 获取步骤 代码确认 节点确认 扫描 delayline 窗口 测试扫描出来的中间值 自动扫描 硬件 RGMII Delayline 获取步骤 如果你的项目具有千兆以太网功能&#xff0c;使用的是 RGMII 接口&#xff0c;只要有硬件差别&#xff0c;都需要重新做一次 delay…

今天讲讲MYSQL数据库事务怎么实现的!

目录 什么是数据库事务 Mysql如何保证原子性 Mysql如何保证持久性 MySQL怎么保证隔离性 事务隔离级别 脏读的解决 不可重复读的解决 幻读的解决 MVCC实现 Read View 那么RC、RR级别下的InnoDB快照读有什么不同&#xff1f; 什么是数据库事务 数据库事务是指一组数据…

鸿蒙让我赚到了第一笔桶金!年薪33.6W!

抢人&#xff01;抢人&#xff01;抢人&#xff01; 所谓抢滩鸿蒙&#xff0c;人才先行。鸿蒙系统火力全开后&#xff0c;抢人已成鸿蒙市场的主题词&#xff01; 智联招聘数据显示&#xff0c;春节后首周&#xff0c;鸿蒙相关职位数同比增长163%&#xff0c;是去年同期的2.6倍…

【包编译】库文件安装错位置怎么办

背景&#xff1a; 在建图的工作空间mapping中&#xff0c;编译好了GeographphicLib-2.3之后&#xff0c;对工作空间mapping进行编译&#xff0c;报错&#xff0c;找不到下面这俩。 总结&#xff1a; 原因&#xff1a;因为GeographphicLib的库文件在编译的时候没有放到默认系统…

“人工智能+数字人”,让数字技术赋能多领域智能化管理、数字化服务

AI数字人结合了语音合成、语音识别、语义理解、图像处理、虚拟形象驱动等多项AI核心技术&#xff0c;可以实现导览服务、信息播报、互动交流、业务咨询等智能化功能。 如今&#xff0c;AI数字人逐渐被政务、文旅、展馆展厅、博物馆、数字会议、金融、校园等等领域多元化应用&am…

springboot如何切换内置web服务器?

切换内置web服务器 这是没有引入web依赖的服务 这是引入web依赖的服务 由此可知默认是tomcat服务器 那么如何切换内置服务器 只要有对应服务器的坐标即可自动切换&#xff0c;先排除tomcat再引入依赖&#xff0c;比如切换成jetty服务器 <dependency><groupId>org…

SQL Serve---查询

概要 1、order by子句 —默认asc&#xff08;升序&#xff09;、desc&#xff08;降序&#xff09; 2、distinct关键字 3、group by子句 4、聚合函数 —max()、min()、sum()、avg()、count() 5、having子句 6、compute子句 英文关键字 order by 排序 asc…

【SpringBoot整合系列】SpringBoot整合FastDFS(二)

目录 SpringBoot整合FastDFSJava客户端/依赖常用api接口解释1.uploadFile参数返回值 2.uploadSlaveFile参数返回值 3.getMetadata参数返回值 4.overwriteMetadata参数&#xff1a;返回值&#xff1a;无 5.mergeMetadata参数&#xff1a;返回值&#xff1a;无 6.queryFileInfo参…

linux重定向符号

将ls命令执行结果重定向到a文件中 将错误ls命令执行结果重定向到a文件中&#xff08;这里用到前面的标准错误输出重定向&#xff09;

python linux服务器ssh简单爆破(测试用户名密码)(连接ssh服务器)(测试登录ssh服务器)

文章目录 背景示例代码代码解释导入模块SSH服务器的地址和端口用户名和密码列表生成所有可能的用户名和密码组合尝试连接到SSH服务器并验证用户名和密码遍历并测试每一对凭证 背景 我们华为摄像头linux终端的密码忘了&#xff0c;还不太好初始化&#xff0c;手动一个个测试太麻…

宏观认知第一篇--AI 是否就是第四次工业革命?

今年春节期间李一舟老师突然爆火&#xff0c;成功晋升为能与 ChatGPT 公司 CEO 齐名的中国 AI 大佬&#xff0c;赚到几个小目标后又火速被封&#xff0c;于是想着有空写篇小文章讲一讲跟普通人切身相关的话题-- AI 是否就是第四次工业革命&#xff1f; “AI 是否就是第四次工业…

数学杂谈之三:数学思想方法

数学杂谈之三&#xff1a;数学思想方法 数学杂谈之一&#xff1a;数学的形态 https://blog.csdn.net/cnds123/article/details/137437208 数学杂谈之二&#xff1a;数学中的概念和理解 https://blog.csdn.net/cnds123/article/details/137500537 数学思维、数学思想和数学方法…

SpringBoot学习(一)引入、分析、核心

文章目录 SpringBoot特性示例总结简化整合简化开发简化配置简化部署简化运维 Spring Initializer创建向导 应用分析依赖管理机制自动配置机制初步理解完整流程 SpringBoot学习点 核心技能常用注解YAML配置文件基本语法示例辅助工具lombok 日志配置简介格式组成记录日志日志级别…

看AI赋能数智化 | Gooxi AI服务器闪耀CITE 2024

4月9日“中国电子信息博览会暨2024 AI算力产业大会”在深圳如期开展&#xff0c;Gooxi携最新产品、行业应用全栈解决方案出席盛会&#xff0c;全面展示Gooxi回应数智新时代下机遇与挑战的丰富AI创新实践成果。 All in AI&#xff0c;奔赴新质生产力 作为中国领先的服务器解决…

题目 2348: 信息学奥赛一本通T1436-数列分段II【二分答案】

信息学奥赛一本通T1436-数列分段II - C语言网 (dotcpp.com) #include<iostream> #include<algorithm> #include<cstring> using namespace std; #define int long long const int N1e5100; const int inf1e9; int n,m; int a[N]; bool check(int mid) {int s…

Linux网络名称空间和虚拟机有何区别

在Linux系统中&#xff0c;网络名称空间和虚拟机都是实现资源隔离和虚拟化的技术&#xff0c;但它们在设计理念、实现机制、资源消耗、使用场景等方面存在着显著的区别。本文旨在全方位、系统性地分析这两种技术的区别。&#x1f50d; 1. 设计理念与实现机制 1.1. 网络名称空…

中通科技数仓数据治理实践

目录 一、背景 1.1 中通数仓架构介绍 1.2 中通数仓层级划分 1.3 中通数据现状 1.4 中通数仓现面临的压力 二、数据仓库具体实践 2.1 时效治理 2.1.1 数据入仓治理 2.1.2 核心模型治理 2.2 存储治理 2.3 内存治理 2.3.1 内存浪费治理 2.3.2 数据倾斜治理 2.3.3 内…