当前位置: 首页 > news >正文

41 stack类与queue类

目录

一、简介

(一)stack类

(二)queue类

二、使用与模拟实现

(一)stack类

1、使用

2、OJ题

(1)最小栈

(2)栈的弹出压入序列

(3)逆波兰表达式求值

3、模拟实现

(二)queue类

1、使用

2、模拟实现

三、priority_queue类

(一)使用

(二)OJ题

1、数组中第K个大的元素

(三)模拟实现

四、deque类(了解)

(一)原理介绍

(二)deque缺陷

(三)做底层默认容器


一、简介

(一)stack类

        在 C++ 中,stack(栈)类是一个容器适配器,它被定义在<stack>头文件中。容器适配器是一种设计模式(就是把解决问题的经验总结出来),它允许将一个已有的容器类(如 vector、list或deque)转换为另一种容器类型的接口stack的情况下,以其他类型的容器为基础,并与提供栈这种数据结构相关操作的接口进行封装。具体声明如下:

        类模板第一个参数是类型,第二个参数为适配器,默认为deque。

(二)queue类

        在 C++ 中,queue(队列)类也是一个容器适配器,它提供了队列这种数据结构的功能。它被定义在<queue>头文件中,像stack一样,queue也是基于其他底层容器(如dequelist)来实现的,默认底层容器是deque。具体声明如下:

        类模板第一个参数是类型,第二个参数为适配器,默认为deque。

二、使用与模拟实现

        stack类与queue类的接口比较简单,因为要保证数据的后进先出/先进先出的属性,所以不提供迭代器。(设计迭代器的话就可以遍历到栈中的每一个元素,就能进行随机插入与删除,就违反了后进先出/先进先出的理念)

(一)stack类

1、使用

        stack类本质是实现栈的功能,即具备先进后出的属性与相关接口,具体如下:

       

函数说明接口说明
stack()
构造空的栈
empty()
检测 stack 是否为空
size()
返回 stack 中元素的个数
top()
返回栈顶元素的引用
push()
将元素 val 压入 stack
pop()
stack 中尾部的元素弹出

        示例代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<stack>
#include<queue>
#include<vector>
using namespace std;void test01()
{stack<int, vector<int>> st;for (size_t i = 1; i < 5; i++){st.push(i);}cout << "empty():" << st.empty() << endl;cout << "size():" << st.size() << endl;//遍历cout << "遍历:" << endl;for (size_t i = 1; i < 5; i++){cout << st.top() << " ";st.pop();}cout << endl;
}int main()
{test01();return 0;
}

        结果如下:

        注意:栈的遍历只能是一边出一边看。

2、OJ题

(1)最小栈

        思路:创建一个正常的栈和一个值插入比自己头元素小的值的栈(为空要插入一次)。

        代码如下:

class MinStack {
public://该构造不写也行,用系统自动生成的无参构造MinStack() {//无参构造中的自定义类型会在初始化列表调用他们自己的构造}void push(int val) {_st.push(val);if(_minst.empty() || val <= _minst.top())_minst.push(val);}void pop() {if(_st.top() == _minst.top())_minst.pop();_st.pop();}int top() {return _st.top();}int getMin() {return _minst.top();}private:stack<int> _st;stack<int> _minst;
};

(2)栈的弹出压入序列

        解题思路:

        ① 创建一个栈;

        ② 给入栈数组给一个指针pushi,先入栈pushi位置的数据,pushi++;

        ③ 给出栈数组给一个指针popi,栈顶数据跟popi位置序列数据比较,若果匹配则出栈,popi++,回到第二步;不匹配或栈为空则回到第一步。(不匹配是后面才出栈);

        ④ 到了最后,pushi等于pushV.size(),若全部匹配,则栈是空的,判空的结果与返回的结果一致;若不匹配则栈不为空。

        代码如下:

bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {size_t pushi = 0;size_t popi = 0;stack<int> st;while(pushV.size()>pushi){st.push(pushV[pushi++]);while(!st.empty() && popV[popi] == st.top()){st.pop();popi++;}}return st.empty();}

(3)逆波兰表达式求值

        解题思路:

        ① 操作数入栈;

        ② 操作符,取栈顶两个操作数运算,运算结果继续入栈;(先取出来的是右操作数,因为栈的先进后出原则)

        ③ 最后一个栈元素就是运算结果。

        代码如下:

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> s;for(auto& str : tokens){if(!(str=="+" || str=="-" || str=="*" || str=="/")){//操作数则入栈s.push(stoi(str));}else{//操作符,取栈顶两元素进行运算int right = s.top();s.pop();int left = s.top();s.pop();switch(str[0]){case '+':s.push(left + right);break;case '-':s.push(left - right);break;case '*':s.push(left * right);break;case '/':s.push(left / right);break;}}}return s.top();}
};

        注意:

        ① 操作符是一个字符,从string里取出来的操作符在case中要用' '进行引用。

        ② 因为操作数可能是多位或者是负数,所以使用中括号加下标的形式进行使用操作数的话可能要把他们拼在一起,非常麻烦,所以直接使用stoi把string匿名对象的内容直接转为整形。

3、模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<deque>namespace zyb 
{template<class T, class Container = deque<T>>//半缺省模板参数class stack{public: //不用接构造函数,因为会调用其他结构的默认构造void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}T& top(){return _con.back();}size_t size() const // 指向的内容不能修改{return _con.size();}bool empty() const{return _con.empty();}private:Container _con;//使用其他结构来作为栈的结构};
}

       测试代码如下:

void test01()
{zyb::stack<int> st;for (size_t i = 0; i < 5; i++){st.push(i);}cout << "size():" << st.size() << endl;cout << "top():" << st.top() << endl;cout << "empty():" << st.empty() << endl;while (!st.empty()){cout << st.top() << " ";st.pop();}
}

        结果如下所示:

        注意:把传入容器的尾部当做栈顶,对栈进行插入删除操作时直接push_back与pop_back即可,若要获取栈顶元素,使用back()这种通用型接口即可获得栈顶元素。

(二)queue类

1、使用

        queue类本质是实现队列的功能,即具备先进先出的属性与相关接口,具体如下:

        示例代码如下:

void test02()
{queue<int> q;for (size_t i = 1; i < 5; i++){q.push(i);}cout << "empty():" << q.empty() << endl;cout << "size():" << q.size() << endl;cout << "front():" << q.front() << endl;cout << "back():" << q.back() << endl;//遍历cout << "遍历:" << endl;for (size_t i = 1; i < 5; i++){cout << q.front() << " ";q.pop();}cout << endl;
}int main()
{test02();return 0;
}

        运行结果如下:

2、模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<deque>namespace zyb
{template<class T, class Container = deque<T>>//半缺省模板参数class queue{public://不用接构造函数,因为会调用其他结构的默认构造void push(const T& x){_con.push_back(x);}void pop(){_con.pop_front();}T& front(){return _con.front();}T& back(){return _con.back();}size_t size() const // 指向的内容不能修改{return _con.size();}bool empty() const{return _con.empty();}private:Container _con;//使用其他结构来作为栈的结构};
}

       测试代码如下:

void test02()
{zyb::queue<int> q;for (size_t i = 0; i < 5; i++){q.push(i);}cout << "size():" << q.size() << endl;cout << "front():" << q.front() << endl;cout << "back():" << q.back() << endl;cout << "empty():" << q.empty() << endl;while (!q.empty()){cout << q.front() << " ";q.pop();}
}

        结果如下所示:

        注意:

        ① 队列不能使用vector进行适配,因为vector不支持头删。

        ② 在测试类中要先展开命名空间再引入stack或queue类模板(里面没展开命名空间std),因为头文件展开后找不到展开的命名空间std,deque找不到出处,会报错。(在vs中写在头文件下面也没事,因为头文件处只是一个类模板,没有实例化,在编译时只做简单的检测,在进行业务处理的时候进行实例化再检查,发现已有命名空间,所以不会报错)

三、priority_queue类

        在 C++ 中,priority_queue(优先队列,)类是一种特殊的队列容器适配器根据严格的弱排序标准(less),它的第一个元素总是它所包含的元素中最大的。

        类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素,默认大根堆)。具体声明如下:

(一)使用

        优先级队列默认使用vector作为其底层存储数据的容器在vector上又使用了堆算法将vector中元素构造成堆的结构因此priority_queue就是堆所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆。

函数声明
接口说明
priority_queue()
priority_queue(first, last)
构造一个空的优先级队列
empty( )
检测优先级队列是否为空,是返回 true ,否 则返回 false
top( )
返回优先级队列中最大 ( 最小元素 ) ,即堆顶元
push(x)
在优先级队列中插入元素 x
pop()
删除优先级队列中最大 ( 最小 ) 元素,即堆顶元

(二)OJ题

1、数组中第K个大的元素

        解题思路:根据优先队列的特性,pop出来的都是最大的元素,则可先pop前k-1个元素,最后再取top元素。

        代码如下:

class Solution {
public:int findKthLargest(vector<int>& nums, int k) {//建堆(默认大堆,出的也是大的数字)priority_queue<int> p(nums.begin(), nums.end());while(--k){p.pop();//把前k-1个最大的数删掉}return p.top();//在栈顶的就是最大的那个}
};

(三)模拟实现

#pragma once
#include<iostream>
#include<vector>namespace zyb
{template<class T, class Container = vector<T>>class priority_queue//小堆{public:void AdjustUp(int child){int parent = (child - 1) / 2;while (child > 0){if (_con[child] < _con[parent]){swap(_con[child], _con[parent]);child = parent;//更新下标parent = (parent - 1) / 2;}elsebreak;}}void push(const T& x)//插入一个数据后要使用向上调整算法佬保持堆的结构{_con.push_back(x);//尾插数据//进行向上调整算法AdjustUp(_con.size() - 1);}void AdjustDowm(int parent){int child = parent * 2 + 1;while (child < _con.size()){if (child + 1 < _con.size() && _con[child] > _con[child + 1])//孩子节点对比,选出较小的一个(因为是小根堆,父亲节点要小)child++;if (_con[parent] > _con[child])//交换父节点与孩子节点,移动节点位置{swap(_con[parent], _con[child]);parent = child;child = parent * 2 + 1;}elsebreak;}}void pop()//删除,先把堆顶元素与堆尾元素交换,删除堆尾元素,再进行向下调整算法{swap(_con[0], _con[_con.size() - 1]);_con.pop_back();AdjustDowm(0);}bool empty(){return _con.empty();}const T& top(){return _con[0];}size_t size(){return _con.size(); }private:Container _con;};
}

        测试代码如下:

void test03()
{zyb::priority_queue<int> pq;//小堆for (size_t i = 0; i < 5; i++){pq.push(i);}cout << "size():" << pq.size() << endl;cout << "top():" << pq.top() << endl;cout << "empty():" << pq.empty() << endl;while (!pq.empty()){cout << pq.top() << " ";pq.pop(); }
}

        其结果为:

四、deque类(了解)

(一)原理介绍

        deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与 list比较,空间利用率比较高。

        deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组,其底层结构如下图所示:

        双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落在了deque的迭代器身上,因此deque的迭代器设计就比较复杂,如下图所示:

        那deque是如何借助其迭代器维护其假想连续的结构呢? 如下图所示:

(二)deque缺陷

        与vector比较,deque的优势是:头部插入和删除时,不需要搬移元素,效率特别高,而且在扩容时,也不需要搬移大量的元素,因此其效率比vector高的。

        与list比较,其底层是连续空间,空间利用率比较高,不需要存储额外字段。

        但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构

(三)做底层默认容器

        stack是一种后进先出的特殊线性数据结构,因此只要具有push_back()和pop_back()操作的线性结构,都可以作为stack的底层容器,比如vector和list都可以;queue是先进先出的特殊线性数据结构,只要具有push_back和pop_front操作的线性结构,都可以作为queue的底层容器,比如 list。但是STL中对stack和queue默认选择deque作为其底层容器,主要是因为:

        ① stack和queue不需要遍历(stack和queue没有迭代器,避开了deque的缺点),只需要在固定的一端或者两端进行操作。

        ② 在stack中元素增长时,deque比vector的效率高(扩容时不需要搬移大量数据);queue中的 元素增长时,deque不仅效率高,而且内存使用率高。

        结合了deque的优点,而完美的避开了其缺陷。

 


        以上内容仅供分享,若有错误,请多指正。

相关文章:

41 stack类与queue类

目录 一、简介 &#xff08;一&#xff09;stack类 &#xff08;二&#xff09;queue类 二、使用与模拟实现 &#xff08;一&#xff09;stack类 1、使用 2、OJ题 &#xff08;1&#xff09;最小栈 &#xff08;2&#xff09;栈的弹出压入序列 &#xff08;3&#xf…...

代码随想录-笔记-其八

让我们开始&#xff1a;动态规划&#xff01; 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; class Solution { public:int climbStairs(i…...

信号仿真高级工程师面试题

信号仿真高级工程师面试题可能涵盖多个方面,旨在全面评估应聘者的专业知识、技能水平、实践经验和问题解决能力。以下是一些可能的面试题及其简要解析: 一、专业知识与技能 描述你对信号仿真的理解 考察点:对信号仿真基本概念、原理及应用的掌握程度。参考答案:信号仿真是…...

FLTK - build fltk-1.1.10 on vs2019

文章目录 FLTK - build fltk-1.1.10 on vs2019概述笔记buildtest测试程序运行 END FLTK - build fltk-1.1.10 on vs2019 概述 看书上用到了fltk-1.1.10, 用vs2019试试能否正常编译使用? 笔记 build 从官网下载fltk-1.1.10-source.tar.bz2 用7zip解开 fltk-1.1.10-source.…...

FPGA远程升级 -- FLASH控制

简介 前文讲到如何实现XILINX芯片程序跳转&#xff0c;但升级程序是事先通过VIVADO工具将两个程序合成一个BIN文件实现升级的&#xff0c;并不能在线更新升级。要实现远程升级的能力需要对FPGA的FLASH进行在线写入升级程序。 FLASH介绍 本次设计FLASH选用的是S25FL128芯片&…...

蓝牙BLE开发——解决iOS设备获取MAC方式

解决iOS设备获取MAC方式 uniapp 解决 iOS 获取 MAC地址&#xff0c;在Android、iOS不同端中互通&#xff0c;根据MAC 地址处理相关的业务场景&#xff1b; 文章目录 解决iOS设备获取MAC方式监听寻找到新设备的事件BLE工具效果图APP监听设备返回数据解决方式ArrayBuffer转16进制…...

【总结(三)】单片机重点知识总结记录(串口重定向+按键消抖+延时)

一.串口重定向 串口重定向代码如下 注意&#xff1a; 要添加头文件include "stdio.h"要勾选微库&#xff0c;即Use MicroLIB /**********重定向************/ //串口1 int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff)…...

攻防世界 unserialize3

开启场景 题目为unserialize3&#xff0c;这个单词在php中代表反序列化&#xff0c;代码 __wakeup 也是php反序列化中常见的魔术方法&#xff0c;所以这个题基本就是和反序列化有关的题目。根据代码提示&#xff0c;编写一个Exploit运行&#xff0c;将对象xctf的信息序列化 得到…...

ISDP010_基于DDD架构实现收银用例主成功场景

信息系统开发实践 &#xff5c; 系列文章传送门 ISDP001_课程概述 ISDP002_Maven上_创建Maven项目 ISDP003_Maven下_Maven项目依赖配置 ISDP004_创建SpringBoot3项目 ISDP005_Spring组件与自动装配 ISDP006_逻辑架构设计 ISDP007_Springboot日志配置与单元测试 ISDP008_SpringB…...

如何注册华为云国际版账户:详细步骤指南

华为云作为全球知名的云计算服务提供商&#xff0c;提供了丰富的云服务和解决方案。无论是企业还是个人开发者&#xff0c;注册华为云国际版账户都是开启云计算之旅的第一步。我们九河云通过本文将为您详细介绍华为云国际版的注册流程。 第一步&#xff1a;访问华为云国际版官网…...

存储过程实现多个分类不同计算规则得到对应的分类、月份和款号

该存储过程 PRO_MON_MDCODE 实现多个分类不同计算规则得到对应的分类、月份和款号,其中线下分类的款最早出现时间会在20230101,最晚是当前月份后12月,电商的款取商品维表的23,24,25年商品年份的A款,其他业务分类逻辑(A-线上,B电商公司,C品牌公司)的款最早出现时间会在2…...

【LeetCode】906、超级回文数

【LeetCode】906、超级回文数 文章目录 一、通过数据量猜解法 枚举 数学 回文1.1 通过数据量猜解法 枚举 数学 回文1.2 多语言解法 二、打表法 一、通过数据量猜解法 枚举 数学 回文 1.1 通过数据量猜解法 枚举 数学 回文 减小数据规模: 先构成回文, 再平方, 再判断是否是范围…...

使 el-input 内部的内容紧贴左边

<el-inputv-model"form.invitor"placeholder"PC端的自动取当前账号的手机号"readonlyclass"no-border-input" />::v-deep(.no-border-input .el-input__inner) { border: none; box-shadow: none; padding-left: 0; /* 确保内容紧贴左边 *…...

【ES6复习笔记】模板字符串(3)

介绍 模板字符串是 ES6 引入的一种新的字符串声明方式&#xff0c;它使用反引号&#xff08;&#xff09;来定义字符串&#xff0c;而不是单引号&#xff08;&#xff09;或双引号&#xff08;"&#xff09;。模板字符串可以包含变量、表达式和换行符&#xff0c;这使得它…...

Linux学习

Linux Linux目录结构 Linux只有一个顶级目录&#xff0c;称之为&#xff1a;根目录 /在Linux系统中表示 出现在开头的/表示&#xff1a;根目录 出现在后面的/表示&#xff1a;层次关系 Linux命令基础 什么是命令、命令行 命令&#xff1a;即Linux操作指令&#xff0c;是系…...

【PostgreSQL使用】最新功能逻辑复制槽的failover,大数据下高可用再添利器

逻辑复制的failover ​专栏内容&#xff1a; postgresql入门到进阶手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. ✅ &#x1f52…...

MongoDB 创建用户、User、Role 相关 操作

创建用户 # db.createUser() Creates a new user.详细 查看 db.createUser() - MongoDB Manual v8.0 设置用户 Role&#xff08;创建用户时也可以设置&#xff09; # db.grantRolesToUser() Grants a role and its privileges to a user. 详细 查看 db.grantRolesToUser(…...

在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)

一、概述 记录时间 [2024-12-26] 本文讲述如何在 Vue3 项目中使用计时器组件。具体包括开发环境的配置&#xff0c;ViteVue 项目的创建&#xff0c;Element Plus 插件的使用&#xff0c;以及计时器组件的创建和使用。 想要直接实现计时器组件&#xff0c;查看文章的第四部分。…...

Redis单线程快的原因

基于内存操作&#xff1a;Redis将数据存储在内存中&#xff0c;使得数据的读写速度极快&#xff0c;这是其性能优势的主要原因。单线程避免上下文切换&#xff1a;在多线程环境下&#xff0c;CPU核数有限&#xff0c;线程上下文切换会带来性能损耗。Redis采用单线程&#xff0c…...

基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线BLOG网”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 在线BLOG网结构功能图 管理员登录功能界面 用户信息…...

重温设计模式--6、享元模式

文章目录 享元模式&#xff08;Flyweight Pattern&#xff09;概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式&#xff08;Flyweight Pattern&#xff09;概述 定义&#xff1a; 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式&#xff0…...

springboot-starter版本升级es版本问题

一、背景说明 版本漏洞处理&#xff0c;springboot版本升级&#xff0c;es版本暂不升级&#xff0c;但是pom引用中es版本一直为7.17.15高版本&#xff0c;不想显示声明版本&#xff0c;定位具体问题&#xff0c;最后还是重新定义了版本进行处理。 二、异常情况 这里看4.4.18是…...

嵌入式科普(25)Home Assistant米家集成意味着IOT的核心是智能设备

目录 一、概述 二、一张图说尽HA 三、HA的相关资料 四、米家集成划重点 五、总结 一、概述 小米Home Assistant 米家集成开源一周star近15k&#xff0c;迭代4个版本&#xff0c;12个贡献者 本文科普一下Home Assistant&#xff08;简称HA&#xff09;、米家集成&#xff…...

前端Python应用指南(四)Django实战:创建一个简单的博客系统

《写给前端的python应用指南》系列&#xff1a; &#xff08;一&#xff09;快速构建 Web 服务器 - Flask vs Node.js 对比&#xff08;二&#xff09;深入Flask&#xff1a;理解Flask的应用结构与模块化设计&#xff08;三&#xff09;Django vs Flask&#xff1a;哪种框架适…...

webrtc获取IceCandidate流程

在WebRTC(Web Real-Time Communication)中,ICECandidate是一个关键概念,它用于描述在建立点对点(P2P)连接时可以考虑的潜在通信端点。以下是关于WebRTC中ICECandidate的详细解释: 一、ICECandidate的定义 ICECandidate对象通常包含以下关键属性: foundation:用于唯一…...

快速入门Spring AI Alibaba

文章目录 前言一、环境准备二、获取API Key三、代码示例pomapplication.ymlcontroller 前言 Spring Cloud Alibaba AI 以 Spring AI 为基础&#xff0c;并在此基础上&#xff0c;基于 Spring AI 0.8.1 版本 API 完成同义系列大模型的接入实现阿里云同义系列大模型全面适配。 在…...

【mysql】MVCC及实现原理

【mysql】MVCC及实现原理 【一】介绍【1】什么是MVCC【2】什么是当前读和快照读【3】当前读&#xff0c;快照读和MVCC的关系【4】MVCC 能解决什么问题&#xff0c;好处&#xff08;1&#xff09;数据库并发场景有三种&#xff0c;分别为&#xff1a;&#xff08;2&#xff09;M…...

C++ —— 模板类与函数

C —— 模板类与函数 模板类可以用于函数的参数和返回值&#xff0c;有三种形式&#xff1a; 普通函数&#xff0c;参数和返回值是模板类的实例化版本。函数模板&#xff0c;参数和返回值是某种的模板类。函数模板&#xff0c;参数和返回值是任意类型&#xff08;支持普通类和…...

【笔记】下载mysql5.7

MySQL5.7安装超详细步骤(保姆级教程)_mysql5.7下载安装-CSDN博客 下载与安装 初次登录以及改密码 MySQL 5.7 安装教程&#xff08;全步骤图解教程&#xff09;_mysql5.7的安装教程-CSDN博客...

让 AMD GPU 在大语言模型推理中崭露头角:机遇与挑战

在当今科技飞速发展的时代&#xff0c;大语言模型&#xff08;LLM&#xff09;的兴起彻底改变了人工智能领域的格局。从智能客服到文本生成&#xff0c;从知识问答到代码编写辅助&#xff0c;大语言模型的应用无处不在&#xff0c;深刻影响着我们的生活和工作。然而&#xff0c…...

Linux运维常见命令

vi/vim快捷键使用 1)拷贝当前行 yy ,拷贝当前行向下的5行 5yy&#xff0c;并粘贴&#xff08;输入p&#xff09;。 2)删除当前行 dd ,删除当前行向下的5行5dd 3)在文件中查找某个单词 [命令行下 /关键字&#xff0c;回车查找 ,输入n就是查找下一个 ] 4)设置文件的行号&…...

前端真实面试题自用

一、写在前面 笔者&#xff0c;经过计算机学硕考研的失败后&#xff0c;想谋求一份前端工作实在是太难了。一方面&#xff0c;确实曾经学习过的东西很久没有拾起&#xff0c;另一方面&#xff0c;对于前端面经还是记忆不深刻&#xff0c;特地写此贴记录笔者在真实前端面试中遇…...

人工智能与云计算的结合:如何释放数据的无限潜力?

引言&#xff1a;数据时代的契机 在当今数字化社会&#xff0c;数据已成为推动经济与技术发展的核心资源&#xff0c;被誉为“21世纪的石油”。从个人消费行为到企业运营决策&#xff0c;再到城市管理与国家治理&#xff0c;每个环节都在生成和积累海量数据。然而&#xff0c;数…...

初始 ShellJS:一个 Node.js 命令行工具集合

一. 前言 Node.js 丰富的生态能赋予我们更强的能力&#xff0c;对于前端工程师来说&#xff0c;使用 Node.js 来编写复杂的 npm script 具有明显的 2 个优势&#xff1a;首先&#xff0c;编写简单的工具脚本对前端工程师来说额外的学习成本很低甚至可以忽略不计&#xff0c;其…...

benchmarksql5.0 测试工具如何在达梦上能够跑起来?

(1)添加驱动程序文件&#xff1a; lib文件夹下创建一个dm文件夹&#xff0c;并在dm文件夹下放置达梦数据库的驱动程序&#xff1a;DmJdbcDriver8.jar (2)引用驱动程序文件所在目录: 在文件benchmarksql-5.0/run/funcs.sh中的function setCP()函数中&#xff1b; 也就是在文件…...

amazon广告授权

amazon授权资料地址 Amazon Advertising Advanced Tools Center postman地址&#xff1a;Amazon Advertising Advanced Tools Center...

设计模式与游戏完美开发(2)

更多内容可以浏览本人博客&#xff1a;https://azureblog.cn/ &#x1f60a; 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第四章 游戏主要类——外观模式&#xff08;Facade&#xff09; 一、游戏子功能的整合 一个游戏程序常常由内部数个不同的…...

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…...

VSCode调试

目录 C/C远程本地调试插件配置参考 C/C远程本地调试 测试源码&#xff1a;https://github.com/jrhee17/ssl-study 插件 Remote - SSH C/C 配置 .vscode/launch.json {"version": "0.2.0","configurations": [{"name": "afte…...

【ES6复习笔记】解构赋值(2)

介绍 解构赋值是一种非常方便的语法&#xff0c;可以让我们更简洁地从数组和对象中提取值&#xff0c;并且可以应用于很多实际开发场景中。 1. 数组的解构赋值 数组的解构赋值是按照一定模式从数组中提取值&#xff0c;然后对变量进行赋值。下面是一个例子&#xff1a; con…...

01 - 初识 Spring

初识Spring 企业级应用 企业级应用是指那些为商业组织、⼤型企业而创建并部署的解决⽅案及应用。这些⼤型的企业级应用结构复 杂、涉及的外部资源众多&#xff0c;事务密集&#xff0c;数据规模⼤&#xff0c;用户数量多&#xff0c;有较强的安全性考虑和较⾼的性能要求。 …...

重装荣耀X14笔记本电脑踩坑记

这几天趁着有国补搞了台荣耀 X14笔记本电脑。到手后第一件事情对我来说当然是要重装成Windows 11 LTSC版。所以按以往的经验做了个USB启动安装盘&#xff0c;但发现上电后按F12能进入启动设备选择&#xff0c;可是USB分类下没有任何设备。重启按F2进入设置界面&#xff0c;关闭…...

华为管理变革之道:奋斗文化与活力

目录 企业文化是什么&#xff1f; 为什么活下去是华为的文化&#xff1f; 活下来&#xff0c;是华为公司的最低纲领&#xff0c;也是华为公司的最高纲领&#xff01; 资源终会枯竭&#xff0c;唯有文化才能生生不息 企业文化之一&#xff1a;以客户为中心 企业文化之二&a…...

代码随想录算法训练营第十五天-二叉树-110.平衡二叉树

所谓平衡二叉树是指任意子树的高度差不超过1目前所学习的有关二叉树的问题&#xff0c;都是基于二叉树的遍历顺序来实现的 #include <iostream> #include <sstream> #define LEN 10009struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(): val(0…...

各种网站(学习资源、常用工具及其他,持续更新中~)

欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…...

【gunicorn -k gevent 参数gevent说明,主要CPU密集和I/O密集型】

CPU 密集型和I/O 密集型是两种不同的计算任务类别&#xff0c;它们的性能瓶颈来源不同&#xff1a; 1. CPU 密集型 定义 CPU 密集型任务是指主要消耗 CPU 计算资源 的任务。这类任务需要大量的计算操作&#xff0c;而很少涉及 I/O 操作&#xff08;如网络或磁盘的读写&#x…...

快速理解24种设计模式

简单工厂模式 建立产品接口类&#xff0c;规定好要实现方法。 建立工厂类&#xff0c;根据传入的参数&#xff0c;实例化所需的类&#xff0c;实例化的类必须实现指定的产品类接口 创建型 单例模式Singleton 保证一个类只有一个实例&#xff0c;并提供一个访问他它的全局…...

5G -- 5G网络架构

5G组网场景 从4G到5G的网络演进&#xff1a; 1、UE -> 4G基站 -> 4G核心网 * 部署初中期&#xff0c;利用存量网络&#xff0c;引入5G基站&#xff0c;4G与5G基站并存 2、UE -> (4G基站、5G基站) -> 4G核心网 * 部署中后期&#xff0c;引入5G核心网&am…...

硬件开发笔记(三十二):TPS54331电源设计(五):原理图BOM表导出、元器件封装核对

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144753092 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

UE5 崩溃问题汇总!!!

Using bundled DotNet SDK version: 6.0.302 ERROR: UnrealBuildTool.dll not found in "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" 在你遇到这种极奇崩溃的BUG &#xff0c;难以解决的时候。 尝试了N种方法&#xff0c;都不行的解决方法。…...