C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
前言:
小编在之前刚完成了C++中栈和队列(stack和queue)的讲解,忘记的小伙伴可以去我上一篇文章看一眼的,今天小编将会带领大家吹奏栈和队列的交响,完成对于他们的模拟实现,使各位更容器去了解它们为什么被叫做容器适配器。
文章目录
- C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
- 1.stack的模拟实现
- 1.1.stack类初步书写
- 1.2.入栈函数push()的实现
- 1.3.出栈函数pop()的模拟实现
- 1.4.判空函数empty()的模拟实现
- 1.5.个数函数size()的模拟实现
- 1.6.栈顶函数top()的模拟实现
- 2.小警示
- 3.queue的模拟实现
- 3.1.queue类的初步实现
- 3.2.入队列函数push()的模拟实现
- 3.3.出队列函数pop()的模拟实现
- 3.4.取队头函数front()的模拟实现
- 3.5.取队尾函数back()的模拟实现
- 3.6.判空函数empty()的模拟实现
- 3.7.个数函数size()的模拟实现
- 4.代码展示
- 4.1.stack
- 4.2.queue
- 5.总结
正文:
1.stack的模拟实现
首先我们就要先实现stack的模拟实现,栈我们以前在数据结构阶段是用顺序表进行实现的,小编此时也是要用一个容器来对其进行实现的,我们在它的众多接口中,不难发现stack是和vector是很像的,所以我们想要实现出stack,就是要给予vector容器进行模拟实现的,当然通过上图我们知道系统是用双端队列(deque)进行实现的,但是比其它,我还是更喜欢使用vector进行模拟实现,小编建议读者朋友在看我模拟实现之前,倘若不了解vector是如何进行使用的,可以先看我之前写过的文章来回顾一下(我先不放上链接了,因为在我写本文之前我还没有发布那篇文章),因为等会我会使用vector的一些接口来帮助我实现出stack,下面开始进入stack类的模拟实现。
1.1.stack类初步书写
我们首先需要先把我们自己写的stack定义在一个命名空间里面,避免和std命名空间里面的stack起冲突,因为stack是一个模版类,所以我们应该用模版类的方式来书写这个类,里面的参数我们对照着标准库书写即可,在我们写完外层以后,就是要书写内层了,此时我们先定一个成员变量,它的类型自然就是Container类型(这个类型可以是vector,可以是list,甚至是string),这个成员变量是为了后续数据的增删而写,下面小编给出这部分代码的书写:
namespace wang //保存在命名空间里面,避免出现名字冲突,防患于未然
{template<class T,class Container = std :: vector<T>> //默认使用的容器是vector,也可以是list,毕竟也有链式栈的存在class stack{private:Container s1; //s1是为了保存数据的,增删还是需要靠它。};
}
1.2.入栈函数push()的实现
可能到这里可能很多读者朋友会疑惑我为什么没有书写stack的构造函数,对于对此有疑惑的读者朋友,请好好的去复习一下类和对象的知识,还记着类和对象知识的读者朋友都知道,对于自定义类型的成员变量,编译器是会自己去调用它的构造函数的,如果成员变量没有构造函数的,那么编译器会直接报错,自定义类型需要自己写,当然不写的话系统会调用默认构造函数(默认构造函数有三种,这只是特殊情况之一),所以各位记住这一点,此时s1是vector类型的,它是会自己去调用自己的构造函数的,我们不用瞎操心,下面我们正式堆push()的实现进行讲述。
其实push()函数的实现,我们仅需去复用s1中的接口即可,看看上图stack的构造,我们不难发现此时我们仅需在一个vector类型的尾部插入数据即可,此时我们就可以去调用vector当中的尾插函数即可,根本不用我们自己思考了,所以这就是我前面说stack很好实现的原因,我们仅需套用成员变量的接口即可,这也是我让各位复习一下vector的原因,下面给出代码:
void push(T x) //此时我们不晓得插入啥类型的元素,这就看我们显示实例化我们想要显示的了
{s1.push_back(x);
}
1.3.出栈函数pop()的模拟实现
和小编上面实现入栈函数一样,对于出栈函数,我们也是仅需套用一下s1的接口即可,通过上图我们可以知道此时的出栈操作,对应着的就是把vector对象的尾部删除,所以我们调用尾删函数即可,下面给出代码:
void pop()
{s1.pop_back();
}
1.4.判空函数empty()的模拟实现
对于判空函数的模拟实现,也和上面的接口类似,了解vector的朋友都知道,vector里面也是有一个叫做empty()的接口的,我们仅需套用这个接口就好了,下面小编给出代码:
bool empty()
{return s1.empty();
}
1.5.个数函数size()的模拟实现
对于它的模拟实现,我们同样也可以套用vector的相关接口,就可以实现这个个数函数,由于难度不大,不再多说给出代码:
int size()
{return s1.size();
}
1.6.栈顶函数top()的模拟实现
对于栈顶函数的模拟实现,我们需要先知道栈顶是vector哪个位置的元素,通过上图便可以轻松的看出来栈顶就是vector对象最后一个位置的元素,此时我们仅需返回尾部元素即可,此时我们可以套用vector中的back接口,这个接口我虽然没讲,它的功能就是返回vector最后一个位置的元素,名字其实就可以知晓了。下面小编给出代码写法:
T top()
{return s1.back();
}
以上便就是对于stack的模拟实现,是不是灰常的简单,小编当时在经历完某几个容器的模拟实现之后,这一模拟实现stack,就感到了一阵舒爽,我们仅需疯狂的套用接口就好了,剩下的全靠编译器的调用了,等会queue的讲解也会非常的舒服,不过在讲述queue之前,小编先给各位说一个小的知识点,避免读者朋友踩坑。
2.小警示
对于接下来无论是容器还是适配器的模拟实现,各位读者朋友千万不要让模版的声明和定义分离,我忘记我模版说没说过了,对于模板类型的类和函数,它们的声明和定义是不可以去分离的,这涉及到了分离编译的知识,这部分的知识点小编通过一个图带各位简单的了解下,更为详细的知识我会在模版进阶文章进行讲述,其中的过程通过下图便可以知晓为什么模版的声明和定义是无法分离的。
所以我们在进行模拟实现的时候,直接把声明和定义放在一个头文件即可,这个知识点要牢记,防止一些读者朋友犯迷糊。
3.queue的模拟实现
在讲述这个小警示以后,紧接着我们就要开始进入queue的模拟实现了,相信看完前文的stack的模拟实现后,各位应该对于queue的模拟实现也会信心满满,因为queue的接口中设计了一端进一端出,因此此时我们用vector封装的话效率会变的很低,根据以前我们数据机构队列的实现的检验来看,用双链表是一个不错的选择,而恰好我们之前list就是一个典型的双链表结构,所以此时我们就是用list来帮助我们实现queue的模拟实现,下面我们就进入queue的模拟实现。
3.1.queue类的初步实现
首先我们需要先完成queue的外部的书写,此时和stack一样,为了防止命名冲突,我们需要把它放置在我们自己的命名空间内,然后完成一个模板类的书写,之后我们再和标准库的queue一样书写模版参量,之后我们在写一个Container类型的对象就好了,把它作为我们的成员变量,通过它实现出队列的增删等操作,下面给出这层外套:
namespace wang
{template<class T,class Container = list<T>>class queue{private:Container s1;};
}
3.2.入队列函数push()的模拟实现
对于入队列函数,此时我们需要按照队列的结构来对于list对象接口进行合理使用,此时我们知道入队列是从队尾入,所以此时我们需要用到list里面的尾插接口来帮助我们实现这个功能,下面小编给出这个代码的书写:
void push(T x)
{s1.push_back(x);
}
3.3.出队列函数pop()的模拟实现
对于出队列函数,我们依照队列的结构,发现它是从队头进行出队列操作,所以此时我们就要借助list对象的头删函数来帮助我们完成出队列操作,下面小编给出这个代码的书写:
void pop()
{s1.poo_front();
}
3.4.取队头函数front()的模拟实现
这个函数的功能名字就可以体现出来,此时我们如果想要取出队头,就需要知道是s1的一个我也没讲过的接口,front()接口,它的功能就是取出双链表第一个有效结点的元素,所以它正好就可以取出队头元素,下面给出代码书写:
T front()
{return s1.front();
}
3.5.取队尾函数back()的模拟实现
这个函数的功能同样通过名字就可以体现出来,此时我们想要取出队尾,就需要知道s1的back()接口,他和vector一样,都是取出最后一个位置的元素,用它便可以取出队尾的元素,下面给出代码:
T back()
{return s1.back();
}
3.6.判空函数empty()的模拟实现
对于判空函数,无非就是判断队列里面是否为空,无非就是检查成员变量是否为空,此时我们仅需调用list对象的判空函数即可,下面小编给出代码:
bool empty()
{return s1.empty();
}
3.7.个数函数size()的模拟实现
我们如果想要知道队列里面有几个有效元素,直到成员对象里面有几个有效元素即可,此时我们仅需套用它的size()函数即可,下面给出代码:
int size()
{return s1.size();
}
以上便就是小编对于queue的模拟实现,此时此刻的你是不是感受到了“套娃”的魅力,对于适配器的模拟实现,我们仅需知道合适的容器就好了,剩下的就是无限的套用,只能说用起来十分的舒适,容器的模拟实现我认为是很复杂的,这就是我到现在都没有书写容器的模拟实现的原因(咳咳其实也是懒的写),下面我把这些代码整合起来来帮助各位知晓一个完整的模拟实现。
4.代码展示
4.1.stack
namespace wang
{template<class T,class Container = std :: vector<T>>class stack{public:void push(T x){s1.push_back(x);}void pop(){s1.pop_back();}bool empty(){return s1.empty();}int size(){return s1.size();}T top(){return s1.back();}private:Container s1;};
}
4.2.queue
namespace wang
{template<class T,class Comtainer = std :: list<T> >class queue{public:void push(T x){s1.push_back(x);}void pop(){s1.pop_front();}int size(){return s1.size();}T front(){return s1.front();}T back(){return s1.back();}bool empty(){return s1.empty();}private:Comtainer s1;};
}
`
5.总结
此时此刻小编就完成了栈和队列的模拟实现,是不是很轻松,这直接套用别的容器接口的感觉就是舒服,如果容器的模拟实现也是这样该多好(当然不可能),希望后来的我可以完成各种容器的模拟实现文章的书写,感觉写一篇相关类型的文章可以帮助我更好的成长,如果文章有错误,可以在评论区点出,我会定期的回复读者朋友,那么各位大佬们,我们下一篇文章见啦!
相关文章:
C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
C嘎嘎探索篇:栈与队列的交响:C中的结构艺术 前言: 小编在之前刚完成了C中栈和队列(stack和queue)的讲解,忘记的小伙伴可以去我上一篇文章看一眼的,今天小编将会带领大家吹奏栈和队列的交响&am…...
摄像头原始数据读取——opencv(cv::VideoCapture)
摄像头原始数据读取——opencv(cv::VideoCapture) 测试代码test.cpp #include <iostream> #include <string>#include <opencv2/opencv.hpp>std::string pixeformatcodec2string(int codec) {char pixeformat_name[5] { (char)((codec >> 0) & …...
unreal engine5中多个摄像机切换
UE5系列文章目录 文章目录 UE5系列文章目录前言一、思路二、具体实现 前言 unreal engine5中使用蓝图实现多个相机切换 一、思路 在Unreal Engine 5中,如果你想要在控件蓝图(Widget Blueprint)中获取场景摄像机的信息,可以按照…...
ensp静态路由实验
一、实验目的 1、熟练掌握交换机的基本配置命令 2、熟练掌握静态路由的使用方法 3. 熟练掌握交换机端口模式 二、实验内容 需求: 根据要求利用现有实验设备组建小型局域网 实验设备: 交换机S37002台;PC机2台;路由器2台。 …...
【在Linux世界中追寻伟大的One Piece】多线程(二)
目录 1 -> 分离线程 2 -> Linux线程互斥 2.1 -> 进程线程间的互斥相关背景概念 2.2 -> 互斥量mutex 2.3 -> 互斥量的接口 2.4 -> 互斥量实现原理探究 3 -> 可重入VS线程安全 3.1 -> 概念 3.2 -> 常见的线程不安全的情况 3.3 -> 常见的…...
Git中HEAD、工作树和索引的区别
在Git版本控制系统中,HEAD、工作树(Working Tree)和索引(Index)是三个非常重要的概念,它们分别代表了不同的状态或区域,下面我将对这三个概念进行详细的解释。 HEAD 定义:HEAD是一…...
洛谷 P1156 垃圾陷阱(搜索 DFS)
题目传送门https://www.luogu.com.cn/problem/P1156 解题思路 本题数据过水,可以使用 dfs。 对于每个垃圾,吃掉或者堆着。 然后考虑剪枝: 如果已经等不到下一个垃圾的到来,直接 return; 如果当前状态已经搜过&am…...
nodepad配置c/c++ cmd快速打开创建项目文件
前提:下载MinGw,并且配置环境变量 点击阅读次篇文章配置MinGw 无论是哪个编译器,执行c文件都是经历以下步骤: 编译文件生成exe文件执行该exe文件 我们先手动完成这两部 手动编译文件使用指令 gcc {你的c文件} -o {生成文件名}生成exe文件 第二步运行exe直接点击该文…...
Excel与PPT:职场两大软件的应用比拼
在职场环境中,Excel和PPT无疑是两款最为常用的办公软件。它们各自承担着不同的职责,为职场人士提供了强大的数据处理和演示功能。然而,哪款软件应用得更多,却并非一概而论,而是取决于个人的工作性质、岗位需求以及个人…...
春秋云境 CVE 复现
CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数,这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下,具有管理选项功能 (admin) 的用户可以使用受影响的功能,但是该插件有一个设置允许低权限用…...
文件系统的作用
在一个完整的嵌入式系统中,进行一个简单的操作(如读取传感器数据并保存到文件)通常会涉及多个步骤。这些步骤包括硬件初始化、数据采集、处理、存储以及与外部系统交互。以下是一个通用的操作流程及文件系统在其中的作用。 嵌入式系统的操作流…...
mysql低版本中update_time不自动更新问题
在mysql低版本时,update_time只有插入时才会自动插入当前时间,更新不会改变。 MySQL 5.7 及以上版本对于TIMESTAMP类型字段有自动更新功能相关特性在 MySQL 5.7以上版本 中,如果将一个TIMESTAMP类型的列设置为ON UPDATE CURRENT_TIMESTAMP属…...
【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】
关注二叉树的三个问题: 什么情况适合自顶向下?什么时候适合用自底向上?一般来说,DFS的递归边界是空节点,什么情况下要额外把叶子节点作为递归边界?在什么情况下,DFS需要有返回值?什…...
【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程
【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转rknnpytorch转onnxonnx转rkn…...
刷题日常(移动零,盛最多水的容器,三数之和,无重复字符的最长子串)
移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 俩种情况: 1.当nums[i]为0的时候 直接i 2.当nums[i]不为0的时候 此时 …...
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
背景 Jetbrain IDE 支持生成 Test 类,其中选择JUnit5 和 JUnit,但是感觉这不是标准的单元测试,因为接口命名吧。 差异对比 两者生成的单测API名称同原API,没加test前缀的。使用差异主要表现在: setUp & …...
LangChain——HTML文本分割 多种文本分割
Text Splitters 文本分割器 加载文档后,您通常会想要对其进行转换以更好地适合您的应用程序。最简单的例子是,您可能希望将长文档分割成更小的块,以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器,可以轻松地拆分、组…...
Spring事务和事务传播机制
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 目录 1.事务 1.1 什么是事务? 1.2 为什么需要事务? 1.3 事务的操作 2. Spring 中的事务 1. 编程式事务 2. 声明式事务Tra…...
STM32F103外部中断配置
一、外部中断 在上一节我们介绍了STM32f103的嵌套向量中断控制器,其中包括中断的使能、失能、中断优先级分组以及中断优先级配置等内容。 1.1 外部中断/事件控制器 在STM32f103支持的60个可屏蔽中断中,有一些比较特殊的中断: 中断编号13 EXTI…...
ChatGPT的应用场景:开启无限可能的大门
ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中…...
计算机毕业设计 | SpringBoot+vue社区医院管理系统(附源码+论文)
1,绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新的时代,各行各业都充分考虑互联网是否能与本行…...
直播实时美颜平台开发详解:基于视频美颜SDK的技术路径
视频美颜SDK作为实现实时美颜的关键技术,为开发者提供了高效、灵活的解决方案。本篇文章,小编将以“基于视频美颜SDK的技术路径”为主题,深入解析直播实时美颜平台的开发要点。 一、视频美颜SDK的作用与优势 视频美颜SDK是一种集成化的开发工…...
一个专为云原生环境设计的高性能分布式文件系统
大家好,今天给大家分享一款开源创新的分布式 POSIX 文件系统JuiceFS,旨在解决海量云存储与各类应用平台(如大数据、机器学习、人工智能等)之间高效对接的问题。 项目介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统&am…...
【Elasticsearch】开启大数据分析的探索与预处理之旅
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
【算法】欧几里得与拓展欧几里得算法
目录 一、欧几里得算法 二、拓展欧几里得算法 2.1 裴蜀定理 2.2 拓展欧几里得算法 2.3 例题 三、线性同余方程 3.1 概念 3.2 例题 一、欧几里得算法 欧几里得算法又称辗转相除法,可用于求解两个数的最大公约数 其思路: gcd(a, b) gcd(b, a%b…...
组合数的求法
1.如果是多组查询的话,需要用数组去储存阶乘的值 n!/(m!(n-m)!) P4071 [SDOI2016] 排列计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<cstdio> #include<iostream> #include<map> #include<cstring> #include<cmath&g…...
【环境搭建】更新Docker Compose到v2.x版本以支持--profile选项
Docker版本陈旧也是搭建的环境起不来的一个重要原因,比如 --profile 选项是 Docker 20.10.0 版本及以上版本才开始支持的,在 Docker Compose v2.1(及以上版本)中引入用于对服务进行分组和按需启动。 更新 Docker Compose 到 v2.x…...
解决 java -jar 报错:xxx.jar 中没有主清单属性
问题复现 在使用 java -jar xxx.jar 命令运行 Java 应用程序时,遇到了以下错误: xxx.jar 中没有主清单属性这个错误表示 JAR 文件缺少必要的启动信息,Java 虚拟机无法找到应用程序的入口点。本文将介绍该错误的原因以及如何通过修改 pom.xm…...
AIGC-----AIGC在虚拟现实中的应用前景
AIGC在虚拟现实中的应用前景 引言 随着人工智能生成内容(AIGC)的快速发展,虚拟现实(VR)技术的应用也迎来了新的契机。AIGC与VR的结合为创造沉浸式体验带来了全新的可能性,这种组合不仅极大地降低了VR内容的…...
【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总
文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…...
Selenium 自动化测试demo
场景描述: 模拟用户登录页面操作,包括输入用户名、密码、验证码。验证码为算数运算,如下: 使用到的工具和依赖: 1. Selenium:pip install selenium 2. 需要安装浏览器驱动:这里使用的是Edge 3…...
深度神经网络模型压缩学习笔记二:离线量化算法和工具、实现原理和细节
文章目录 一、离线量化基础概念二、离线量化难点三、离线量化算法介绍四、离线量化工具介绍五、离线量化工具整体设计结构六、离线量化工具代码解读七、实践:Dipoorlet量化MobileNet 一、离线量化基础概念 二、离线量化难点 三、离线量化算法介绍 四、离线量化工…...
uni-app运行 安卓模拟器 MuMu模拟器
最近公司开发移动端系统,使用真机时每次调试的时候换来换去的麻烦,所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器,如果系统…...
网络安全,文明上网(6)网安相关法律
列举 1. 《中华人民共和国网络安全法》: - 这是中国网络安全的基本法律,于2017年6月1日开始实施。该法律明确了网络运营者的安全保护义务,包括采取数据分类、重要数据备份和加密等措施。 2. 《中华人民共和国数据安全法》: …...
Perforce Automation With Python
11/2024 出版 MP4 |视频:h264, 19201080 |音频:AAC,44.1 KHz 语言:英语 |大小: 2.65 GB |时长: 5 小时 18 分钟 使用 Python 脚本简化与 Perforce 版本控制系统相关的生产流程 您将学 到什么 …...
卷积神经网络学习记录
目录 神经网络基础定义: 基本组成部分 工作流程 卷积层(卷积定义)【CONV】: 卷积层(Convolutional Layer) 特征提取:卷积层的主要作用是通过卷积核(或滤波器)运算提…...
Spring Cloud Alibaba
What is SCA Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。 依托Spring Cloud Alibaba,您只需要添加一些注解和少量…...
【AI绘画】Midjourney进阶:色调详解(上)
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯Midjourney中的色彩控制为什么要控制色彩?为什么要在Midjourney中控制色彩? 💯色调白色调淡色调明色调 💯…...
【滑动窗口】找到字符串中所有字母异位词
文章目录 找到字符串中所有字母异位词 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> ret;int sLen s.size(), pLen p.size(), validChar;// 母串长度比子串长度还小 直接返回空vectorif (sLen < pLen)return ret;// …...
C++:final 关键字用于阻止类被继承或阻止虚函数被进一步重写
final 关键字的作用 C11 引入了 final 关键字,用于阻止类被继承或阻止虚函数被进一步重写。 防止类被继承:在类声明后添加 final,表示该类不能被继承。防止虚函数被重写:在虚函数声明后添加 final,表示该虚函数在派生…...
sql漏洞
目录 SQL漏洞产生的原因 未对用户输入进行验证和过滤: 动态SQL语句的拼接: 不安全的数据库配置: 缺乏安全意识和培训: 使用过时的技术或框架: 如何避免SQL漏洞产生 使用参数化查询: 对用户输入进行…...
SQL 复杂查询
目录 复杂查询 一、目的和要求 二、实验内容 (1)查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。(分别采用子查询和连接方式实现) 查询出每个订单的消费者姓名及联系方式。 在…...
在 PyTorch 训练中使用 `tqdm` 显示进度条
在 PyTorch 训练中使用 tqdm 显示进度条 在深度学习的训练过程中,实时查看训练进度是非常重要的,它可以帮助我们更好地理解训练的效率,并及时调整模型或优化参数。使用 tqdm 库来为训练过程添加进度条是一个非常有效的方式,本文将…...
PYNQ 框架 - 时钟系统 + pl_clk 时钟输出不准确问题
目录 1. 简介 2. PS 时钟计算 2.1 计算框架 2.2 KV260 的参考时钟 2.3 PL_CLK 设置 3. 测试 3.1 Block design 3.2 引脚绑定 3.3 使用 AD2 测量 3.4 调整分频 4. PYNQ 时钟驱动 4.1 源码解析 4.2 查看 PL_CLK 4.3 配置 PL_CLK 5. 总结 1. 简介 ZYNQ MPSoC 具有…...
【Reinforcement Learning】强化学习下的多级反馈队列(MFQ)算法
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
Cocos编辑器
1、下载 下载地址:https://www.cocos.com/creator-download 2、编辑器界面介绍 官方链接:https://docs.cocos.com/creator/3.8/manual/zh/editor/ 3、项目结构 官方链接:https://docs.cocos.com/creator/3.8/manual/zh/getting-started/…...
Linux kernel 堆溢出利用方法(三)
前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中任意地址申请的其中一种比赛比较常用的利用手法modprobe_path(虽然在高版本内核已经不可用了但ctf比赛还是比较常用的)。在通过两道道近期比赛的赛题来讲解。 Arbitrary Address Allocation…...
文心一言与千帆大模型平台的区别:探索百度AI生态的双子星
随着人工智能技术的迅猛发展,越来越多的公司开始投入资源开发自己的AI解决方案。在中国,百度作为互联网巨头之一,不仅在搜索引擎领域占据重要位置,还在AI领域取得了显著成就。其中,“文心一言”和“千帆大模型平台”便…...
JavaWeb——SpringBoot原理
10.1. 配置优先级 10.1.1. 配置文件 properties > yml(推荐) > yaml 10.1.2. Java系统属性、命令行参数 命令行参数 > Java系统属性 > 配置文件 10.2. Bean管理 10.2.1. 手动获取bean ApplicationContext,IOC容器对象 10.2.2. bean作用域 10.2.3.…...
【算法】连通块问题(C/C++)
目录 连通块问题 解决思路 步骤: 初始化: DFS函数: 复杂度分析 代码实现(C) 题目链接:2060. 奶牛选美 - AcWing题库 解题思路: AC代码: 题目链接:687. 扫雷 -…...