C++笔记-stack_queue(含deque,priority_queue,仿函数的讲解)
一.stack和queue的基本使用
stack和queue就是我们之前所学的栈和队列,这两个和之前学的vector,list不太一样:
这是vector和list的,注意第一行中写的containers,代表这两个都是容器,但是:
stack和queue不是容器,而是容器适配器,也是STL六大件之一,可能有人有疑惑:两者区别是什么?
容器:容器是用于存储和管理数据的类模板。常见的容器包括vector、list、deque、set和map等。容器分为两大类:序列式容器和关联式容器。序列式容器按元素加入的顺序存储数据,而关联式容器按关键字存储和访问数据。
适配器:适配器用于修饰容器、仿函数或迭代器的接口,使其行为类似于另一种事物。例如,queue和stack是容器适配器,它们底层依赖于deque 。
适配器不止有容器适配器,还有其他的适配器。
容器适配器简而言之就是借助容器的一种接口转变为另一种接口。
所以这两个的实现和之前的有所不同。
这两者的接口也和之前我们学栈和队列时所实现的一样,相信大家看到名字就知道如何使用,这里
对emplace提一嘴。
emplace和push的功能一样,但是其中涉及到目前未接触的知识,所以目前知道它怎么用即可,后面学到相关的知识会讲解。
下面演示一下stack和queue的基本使用:
这是stack的基本使用,和之前学过的一样,遵循后进先出的原则,将其栈顶元素打印出来。当然,出栈顺序不是唯一的。
这是queue的基本应用,和之前学过的一样,遵循先进先出的原则,打印出队列中队头的数据。和栈不同的是,队列出队顺序是唯一的,即使中间插入删除,也是如此,原因也就是先进先出。
二.stack和queue的实现
2.1stack
当我们实现stack或queue时就会发现比起容器的底层实现来说要简单许多,stack和queue都可以借助容器来实现。
在模板参数中我多写了一个类型Container,想必大家看见这个单词就知道它是什么作用,没错,就是用来接收不同的容器。
因为我们知道不管是stack还是queue,都可以用vector或者list来实现,所以为了满足这个需求多写一个类型。
所以唯一的一个成员变量就是由不同的容器所创建的对象,剩下stack中的接口就都可以借助容器来实现,这里实现都比较简单所以我就不过多赘述了。
唯一要说明的就是back接口是之前没有讲到的,不过看这个名字就知道返回的是最后一个数据,与之相反的是front,返回的是第一个数据。
2.2queue
和stack一样,queue借助容器的接口也可以实现。
不过要注意的是如果在使用queue时,传的容器是vector,是不能调用pop_front的,因为vector底层没有实现这个接口:
所以如果要用vector来实现queue,可以借助erase接口来实现。
stack和queue是都没有迭代器的,只有容器才会有迭代器。
三.deque
而在实际应用中,第二个类型Container是有默认容器的,这个容器就是deque。
有人会疑惑为什么默认容器既不是vector或者list,而是deque呢?
在解决这个问题之前我们先思考一下vector和list的优缺点:
vector:
优点:下标随机访问效率高
缺点:
1.头部或者中间的插入删除效率低
2.扩容会造成一定的空间浪费。如:容量200,但只存入了100个甚至更少的数据
list:
优点:
1.头部或中间的插入删除效率高
2.不存在扩容,不会有空间浪费,按需申请结点或释放
缺点:不支持下标随机访问
其实看了两者的优缺点,vector和list其实是互补的。
而deque:
double-ended queue就是deque的名字,叫做双端队列,别看名字后面加了个队列,其实跟队列没有关系。
可以看出deque支持[]符号,并且支持头插,头删,尾插和尾删。其实,deque就是vector和list的整合,同时兼具vector和list的优点。
但是deque的结构要比我们之前学的所有容器要复杂,甚至复杂得多。
deque的结构大概就是这样,中控指针数组中保存的就是各个小数组的地址,而每一个地址都指向一个buffer数组,这个数组的大小一般都不大。
可以看出每个buffer数组之间并不连续的,但是再中控指针数组存的指针是连续的。
我们下来看deque的具体结构:
这就是deque的具体结构,可以看出是比之前的容器复杂多的,就一个迭代器就含有四个变量,cur是用来遍历deque的,first是每个buffer数组首元素地址,last指向每个buffer数组结尾,node是来寻找每一个buffer数组,因为要记录每个buffer数组的地址,所以node是二级指针,比如:node++就会找到下一个buffer数组。
而deque为什么叫双端队列的原因也正是因为它的结构,从图中可以看出deque存数据是从中间开始存数据,如果要头插或者尾插,就会向两边延伸开辟新的buffer数组。
但是在实际应用中deque用的并不多,所以下面我只简单介绍一下deque某些接口的实现思路:
我们经常要用迭代器来遍历数组,在deque中cur就是这个作用,虽然迭代器含有四个变量,但其实比较的就是cur。
而遍历完一个buffer数组,就要走到下个buffer数组,所以也要对++符号重载进行一些变化,如上图所示,其中的N就是每个buffer数组的大小。
而如果要头插,注意是从最后一个位置开始插入数据,这样才符合deque的结构,不能从头插入数据,尾插就是直接按顺序插入数据即可。
头插和尾插同样也会造成一部分的空间浪费,但是浪费量相对较小,这取决于buffer数组的大小,最大就是浪费了buffer数组的大小-1个大小的空间。
而如果要找到某个位置的值,就要找到它是哪个buffer数组的,并且是这个buffer数组的哪个位置。
而找到是哪个数组就可以让输入的值 / buffer数组的大小,具体哪个位置就让输入值 % buffer数组的大小,图下方的例子就可以验证。
这时候我们思考一个问题:为什么deque同时兼顾了vector和list的优点,但是并没有替代vector和list呢?
解决这个问题就要先总结出deque的优缺点:
优点:
1.头部和尾部的插入删除效率高
2.下标随机访问效率也可以,但是不如vector
缺点:
中间的插入或删除效率不高,不如list
其实deque无法完全替代vector和list的原因就很明显了,虽然它同时兼具vector和list的优点,但是没有引起质变的功能,兼具的优点没有发挥到极致。
说白了就是什么都沾点,但是都不精,在下标随机访问方面不如vector,中间的插入删除不如list。
可能有人会问:那下标随机访问效率会差多少呢?
我直接说结论:大概差两倍左右的性能。举个例子:把deque中的数据拷贝到vector中进行sort排序,再把排好序的数据拷贝回deque的效率都比deque直接调用sort排序高,效率基本上还是差两倍。
那中间的插入删除效率会差多少呢?
这个问题相信大家都有数,就相当于vector的中间插入删除和list的中间插入删除效率相比较。
而为什么stack和queue的默认容器是deque的原因就是deque的第一个优点,因为stack和queue主要功能就是头部和尾部的插入和删除。
四.priority_queue
4.1priority_queue的基本使用
priority_queue就是优先级队列,这个就是特殊的队列,所以也是包含在queue头文件中的。
和stack,queue一样,priority_queue也是容器适配器,从第二个参数可知,priority_queue底层默认是用vector实现的。
第三个参数呢叫做仿函数,下面会讲,这里先讲如何使用。
为什么叫做优先级队列呢?
因为它是按优先级来出数据的,默认是按大的优先级高,这里可能有人感觉和之前学的某个东西有点像。
没错,就是堆,按优先级来出数据,不就是默认是大堆吗。所以这也是为什么默认容器是vector来实现。
根据输出的结果,我们可以自己画个图来看输出顺序是否是大堆,那么如何用小堆来输出呢?
这时候就要用到仿函数,这里用到的仿函数是库里的greater。
这里提一嘴,正常来说,greater这个仿函数是从大到小排序,less仿函数才是从小到大,不过因为早期priority_queue设计的一些缺陷,导致两个仿函数在这里功能反过来了。
4.2priority_queue的底层实现
这里实现我先按照大堆来实现,后面讲仿函数时在进行优化。
根据priority_queue的接口,利用容器接口来进行实现,对priority_queue进行修改其实就是对堆进行修改,所以push和pop要利用之前学的堆的知识来解决问题。
向上调整算法和向下调整算法在堆的章节已经详细讲过,这里就不过多赘述。
需要注意的是就是pop时,要先交换堆顶和堆底的数据,如果直接删堆顶的数据,整个堆的结构就会被破坏。交换后,再利用向下调整算法就可以解决这个问题。
五.仿函数
仿函数(Functor),也被叫做函数对象(Function Object),它是一种行为类似于函数的对象。在编程里,函数是一段能够接收输入参数并返回结果的代码。而仿函数则是一个可以像函数那样被调用的对象。
一般仿函数是一个类或者结构体,这两个用哪个实现都一样,下面我们来简单实现以下上面所讲的less和greater:
仿函数实现起来很简单,就是重载了()符号,使其比较逻辑发生改变。
其实仿函数的主要作用也就是改变比较逻辑,使其按照你想要的比较逻辑进行比较。
在使用时就能体现为什么叫实现函数的功能,设想一下,如果没有写Subject::less<int> ls和Subject::greater<int> gt,直接看输出那一行,是不是感觉就像两个函数传参一样。
通过实现仿函数,我们来对上面所写的push和pop接口进行优化:
这里我们就可以使用仿函数来对向上和向下调整算法进行优化,为了和库里面保持一致,这里同样默认是大堆,用greater来实现。
要用greater来实现的话,注意传参的顺序,两者不能颠倒,保证如果不使用仿函数,两者是>的比较。
仿函数在一些特殊场景也发挥着作用:
比如我们传的类型时string,string默认使用ASCII值来进行比较,但是我们如果不想用ASCII比较呢?比如想按照长度来比较:
此时我们自己写一个仿函数,来选择比较的方式,就可以做到按照长度进行排序。
以上就是stck_queue的内容。
相关文章:
C++笔记-stack_queue(含deque,priority_queue,仿函数的讲解)
一.stack和queue的基本使用 stack和queue就是我们之前所学的栈和队列,这两个和之前学的vector,list不太一样: 这是vector和list的,注意第一行中写的containers,代表这两个都是容器,但是: stac…...
意见反馈留言二维码制作
意见反馈对于工作整改具有重要作用,在工作中一味埋头苦干不如抬头多听听反馈声音。而传统的反馈内容投递后,因为繁琐性和时效性的枷锁,往往石沉大海,不知何时才能得到回应,这就导致反馈信息的延迟,一些时效…...
扣子智能体平台深度解读:功能剖析与全流程工作流详解
在上一篇文章中,我们已经带大家了解了“智能体”这一概念的内涵,并通过扣子智能体平台的各大模块做了初步介绍,同时用一个简单的示例演示了如何构建和部署第一个智能体。那篇文章打好了基础,让大家对智能体的基本组成与工作方式有…...
C语言五子棋项目
头文件与宏定义 #include <graphics.h> #include <conio.h> graphics.h:EasyX 图形库,提供图形绘制功能(画线、画圆、显示文字等)。 conio.h:提供控制台输入输出函数(这里只是为了兼容性&…...
建筑安全员 A 证与 C 证:差异决定职业方向
在建筑行业的职业发展道路上,安全员 A 证和 C 证就像两条不同的岔路,它们之间的差异,在很大程度上决定了从业者的职业方向。 从证书性质和用途来看,A 证是从业资格证书,更像是一把开启安全管理高层岗位的 “金钥匙”。…...
长连接、短连接与WebSocket的基本知识
目录 前言正文 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附…...
MySQL常见问题解答
一、安装与配置问题 1. 安装失败(权限 / 依赖 / 端口冲突) 权限问题:以管理员身份运行安装程序(Windows)或使用sudo(Linux)。依赖缺失: Windows 需安装 Visual C++ Redistributable(如 2013 版)。Linux 通过包管理器安装依赖(如libaio、perl)。端口冲突: 检查 33…...
Codeforces Round 1019 (Div. 2)(ABCD)
A. Common Multiple 翻译: 给你一个整数数组 a1,a2,...,an。如果存在一个数组 y1,y2,...,ym,且 y 的元素是不同的(换句话说,对于所有 1≤i<j≤m 的数组,yi≠yj),并且对于所有 1≤i≤m 的数组…...
爬虫学习总结
通过前几次课,我们学习了爬虫的相关基础知识。 以下是我对爬虫学习做的一些总结: 一、认识爬虫:开启数据抓取之旅 1.1 什么是网络爬虫 网络爬虫就像是一个不知疲倦的 “数据搬运工”,它能按照预先设定的规则,自动…...
UE5的 Modify Curve 蓝图节点
In Unreal Engine’s Animation Blueprints, the Modify Curve node lets you drive and alter any named Animation Curve on your character at runtime. The Apply Mode setting on that node controls how the “new” value you feed in (via the added curve‐input pin)…...
鸿蒙中的并发线程间通信、线程间通信对象
目录 并发线程间通信1. 线程间通信对象1.1 普通对象1.2 ArrayBuufer对象1.3 SharedArrayBuffer对象1.4 Transferable对象(NativeBinding对象)1.5 Sendable对象简介异步锁ASON解析与生成共享容器共享模块Sendable对象冻结 2 线程间通信场景2.1 使用TaskPo…...
Elasticsearch内核探秘:从Shard分配到网络通信的深度实践指南
#作者:孙德新 文章目录 一、底层模块深入解析之shard allocation1、shard allocation的介绍2、cluster level shard allocation介绍3、disk-based shard allocation介绍4、shard allocation awareness5、shard allocation filtering6、node下线时的shard延迟分配7、…...
Vue3 模板语法
目录 一、插值语法 {{ }} 二、核心指令 三、动态属性绑定 四、事件修饰符 五、条件渲染 vs 列表渲染总结 六、最佳实践 示例 1:插值语法 & 基础绑定 示例 2:条件渲染 示例 3:列表渲染 示例 4:事件处理 示例 5&…...
第1节:Backtrader到底是个啥?能干嘛?
——“框架在手,天下我有;不是吹,Backtrader真香警告!” 🐣 一句话简介 Backtrader 是一个 专门为量化交易打造的 Python 回测框架,说白了,它就是一个量化策略“模拟器控制台评审团”ÿ…...
Java基础第21天-正则表达式
正则表达式是对字符串执行模式匹配的技术 如果想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为: 限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 转义号\\:在我们使用正则表达式去检索某些特…...
【Pandas】pandas DataFrame mod
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
【哈希表】1399. 统计最大组的数目
1399. 统计最大组的数目 - 力扣(LeetCode) 给你一个整数 n 。请你先求出从 1 到 n 的每个整数 10 进制表示下的数位和(每一位上的数字相加),然后把数位和相等的数字放到同一个组中。 请你统计每个组中的数字数目&…...
57、Spring Boot 最佳实践
Spring Boot 最佳实践 一. 开发规范与代码风格 编写高质量的代码不仅需要功能的实现,还需要遵循一定的规范和代码风格,以提高代码的可读性、可维护性和协作效率。以下是 Spring Boot 开发中的一些关键规范和代码风格建议。 1. 代码命名规范 在编写代码时,命名是非常重要的…...
Java高级:数据库访问优化
系列文章目录 Java高级部分 JDBC编程 文章目录 系列文章目录前言一、编写属性文件:二、编写DBUtil工具类:三、使用DBUtil工具类:总结 前言 通过我之前发的数据库连接,数据库连接https://blog.csdn.net/2301_81776550/article/det…...
升级xcode16之后react-native-zip-archive不兼容,unsupported option ‘-G‘
问题 升级xcode到16之后,xcode build报错:unsupported option -G for target x86_64-apple-ios13.4-simulator (in target RNZipArchive from project Pods) 出现原因 在 React Native 项目中,当你将 Xcode 升级到 16 后,可能会遇到 RNZipArchive 相关的编译错误,特别是…...
基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别,适合研究学习(Matlab完整源码和数据),附模型研究报告
基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别,适合研究学习(Matlab完整源码和数据),附模型研究报告 目录 基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别,适合研究学习࿰…...
逻辑漏洞安全
逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。 在实际开发中,因为开发者水平不一没有安全意识,而且业务发展迅速内部测试没有及时到位,所以常常会出现类似的漏洞。 由于开发者/设计者在开发过程中,由于代码…...
基于PaddleOCR对图片中的excel进行识别并转换成word优化(二)
0、原图 一、优化地方 计算行的时候,采用概率分布去统计差值概率比较大的即为所要的值。 def find_common_difference(array):"""判断数组中每个元素的差值是否相等,并返回该差值:param array: 二维数组,其中每个元素是一个…...
5.2.3 WPF 中 XAML 文件 Converter 使用介绍
Converter(转换器)在 WPF 数据绑定中扮演着重要角色,用于在源数据和目标属性之间进行值转换 举例来说:我想用一个bool量来控制一个背景,为true时,显示红色;为false时背景用默认颜色。因此 Backg…...
基于STM32_HAL库的HC-08蓝牙插座项目
基于STM32_HAL库的HC-08蓝牙插座 文章目录 基于STM32_HAL库的HC-08蓝牙插座一、项目需求二、硬件连接三、项目实现3.1 CubeMX配置3.2 以阻塞的方式实现3.3 以中断的方式实现 一、项目需求 通过手机可以控制开发板上的LED或者继电器 二、硬件连接 首先将HC-08蓝牙模块连接到我们…...
SwiftUI 3.Button介绍和使用
SwiftUI 的 Button 是用于触发用户操作的核心交互组件。以下是 Button 的详细介绍和使用示例: 一、基础用法 1. 创建简单按钮 Button("点击我") {print("按钮被点击了") }2. 自定义按钮内容 Button {// 点击动作 } label: {Text("保存&…...
Linux 管道理解
一、什么是管道 1.1 unix中最古老的进程间通信 1.2 一个进程链接到另一个进程的数据流称为“管道”: 图解: 二、管道通信的原理 2.1当我们创建一个进程然后打开一个文件的时候 会经过以下步骤: ①首先要描述这个进程,为这个…...
从并发问题衍生出的Spring的七种事务传播行为
最近在处理一个BPM流程时,遇到了并发问题,原因是事务粒度太大了,导致等待lock超时。今天刚好借此机会分享下Spring框架中提供的7种事务传播行为。 在 Spring中,Transactional 注解支持配置事务的传播行为,用于指定当一…...
第十五届蓝桥杯 2024 C/C++组 艺术与篮球
目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷 艺术…...
Python内置函数---bin()
用于将整数转换为二进制字符串 1. 基本语法与参数 bin(x) 参数: x 必须为整数( int 类型),或实现了 __index__() 方法的自定义对象(该方法需返回整数) 。 返回值:以 0b 开头的二进制字符串。…...
网络socks 代理
在系统/终端中设了这样的环境变量,而没有在代码中覆盖,HTTPX 就会启用该 socks 代理。 env | grep proxy https_proxyhttps://proxyhk.zte.com.cn:80 http_proxyhttp://proxyhk.zte.com.cn:80 no_proxylocalhost,127.0.0.0/8,::1,zte.com.cn,zte.intra,…...
【正则表达式】核心知识点全景解析
目录 一、基础语法架构二、核心元字符详解三、高级匹配技巧1. 字符集合2. 分组与引用3. 断言机制 四、Python re模块核心方法五、性能优化策略1. 编译重用2. 避免回溯陷阱3. 选择高效量词 六、典型应用场景1. 数据验证2. 数据提取3. 文本清洗 七、调试技巧宝典1. 可视化调试工具…...
深度学习--ResNet残差神经网络解析
文章目录 前言一、什么是ResNet网络二、传统卷积神经网络存在的问题1、梯度消失和梯度爆炸2、退化问题 三、如何解决问题四、残差结构五、18层残差网络1、解释2、隔层相加优点3、隔层相加数值增大问题 六、18层残差网络以外的表格示例七、BN层(Batch Normalization&…...
数据结构线性表的顺序存储结构
线性表是由零个或多个数据元素组成的有序序列。 特点: 数据元素间是有顺序的; 数据元素的个数是有限的; 一般来说,数据元素的类型是相同的(强类型语言)。c/c是强类型语言,必须指定数据类型。…...
深入解析C++ STL Queue:先进先出的数据结构
一、引言 在计算机科学中,队列(Queue)作为一种遵循先进先出(FIFO)原则的数据结构,是算法设计和系统开发的基础组件。C STL中的queue容器适配器以简洁的接口封装了底层容器的操作,为开发者提供…...
永磁同步电机控制算法-反馈线性化控制
一、原理介绍 基于非线性系统的精确线性化控制方法,采用精确反馈线性化原理对永磁同步电机进行输入-输出线性化,该方法通过坐标变换和状态反馈将系统的数学模型转变为两个线性子系统,在实现线性化的同时也对系统中电流和转速存在的耦合现象进…...
开源 RAG 引擎:文档理解精准、检索高效、可视化干预灵活,一站式搞定
引言: RAGFlow 是一款基于深度文档理解的开源 RAG 引擎,与 LLM 结合后可实现精准引用问答。它支持 20 多种文档格式解析,配备智能分块策略及混合检索方案,还有可视化干预界面,且支持 Docker 快速部署,堪称…...
URP-UGUI相关知识
一、UGUI的基本组成部分 Canvas (画布)所有UI都需要放在Canvas画布下面,不然无法显示EventSystem 所有的事件响应系统都需要依赖于EventSystem,若删除该组件,交互效果就 不会显示 1.Canvas(画…...
COMSOL多孔结构传热模拟
多孔结构传热模拟涉及对多孔介质内部复杂的热量传递过程进行建模和分析,这类模拟对于优化材料设计、提高能源效率以及解决环境问题等方面具有重要意义。本案例介绍在COMSOL内建立全连通多孔结构几何模型,并将孔隙及基体划分两相材料,进行多孔…...
【CSS】层叠,优先级与继承(四):层叠,优先级与继承的关系
层叠,优先级与继承的关系 前文概括 【CSS】层叠,优先级与继承(一):超详细层叠知识点 【CSS】层叠、优先级与继承(二):超详细优先级知识点 【CSS】层叠,优先级与继承&am…...
CDN加速http请求
一、CDN加速定义 CDN(Content Delivery Network,内容分发网络)是通过全球分布式节点服务器缓存网站内容,使用户就近获取数据的技术。其核心目标是缩短用户与内容之间的物理距离,解决网络拥塞、带宽不足等问题ÿ…...
python实战项目63:获取腾讯招聘信息内容并进行统计分析
python实战项目63:获取腾讯招聘信息内容并进行统计分析 一、需求分析二、流程分析1、获取指定招聘工作类型的目标地址url。2、采集详情页信息。3、保存数据4、完整爬虫代码三、统计分析一、需求分析 本项目的需求是爬取腾讯社会招聘信息网中社会招聘的不同工作类别岗位数据,…...
FlinkUDF用户自定义函数深度剖析
Flink 作为一款强大的流批一体数据处理引擎,其灵活性和扩展性在很大程度上依赖于用户自定义函数(User-Defined Functions, UDF)。UDF 允许开发者根据业务需求扩展 Flink 的核心功能,实现复杂的数据转换、聚合或分析。本文将系统性…...
Python图形界面编程(一)
目录 一、相关的库 1、tkinter库 2、PyQt库 二、图形界面编程要点 三、tkinter控件 1、tkinter控件表 2、tkinter的常用控件 3、tkinter的扩展控件 四、tkinter布局 1、简单示例 2、默认情况下的grid规则 3、调整窗口和网格 (1)调整窗口 &…...
HarmonyOS Grid 网格列表可长按 item 拖动移动位置
方案一 @Component struct WorkCircleCreatePage {// 存储车控列表的数组@State VehicleDoorArr: IVehicleDoor[] = []// 当前移动的Item索引@State CurrentIndex: number = -1// 拖动时显示的数据@State MoveItem: IVehicleDoor = { title: , icon: }// 拖动时放大倍数@State…...
出现 ORA-00904: “TENANT_ID“: 标识符无效 解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 执行代码的时候,出现如下所示: org.springframework.jdbc.BadSqlGrammarException:</...
榜单持久化
榜单持久化的基本流程是这样的: 创建表 持久化Redis数据到数据库 清理Redis数据 现在,创建表的动作已经完成,接下来就轮到Redis数据的持久化了。持久化的步骤如下: 读取Redis数据 判断数据是否存在 不存在,直接结束…...
璞华ChatBI闪耀2025数博会:对话式数据分析引领数智化转型新范式
4月17日至19日,2025中国(武汉)数字经济产业博览会在武汉盛大举办,璞华集团携自主研发的“ChatBI自然语言问答式数据分析平台”惊艳亮相。以 "通过对话让数据说话" 为主题,璞华集团在 A3-T8 展位构建了沉浸式…...
力扣DAY63-67 | 热100 | 二分:搜索插入位置、搜索二维矩阵、排序数组查找元素、搜索旋转排序数组、搜索最小值
前言 简单、中等 √ 二分法思路很简单,但是判断边界太麻烦了!难道真的要去背模板吗 搜索插入位置 我的题解 循环条件左不超过右,目标大于中间值(向下取整)时,左中1,小于,右中-1&…...
leetcode-哈希表
哈希表 127. 单词接龙 题目 字典 wordList 中从单词 beginWord 到 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s(1) -> s(2) -> ... -> s(k): 每一对相邻的单词只差一个字母。 对于 1 < i < k 时,每个 s(i) 都在…...