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

使用哈希表封装myunordered_set和myunordered_map

文章目录

  • 使用哈希表封装myunordered_set和myunordered_map
    • 实现出复用哈希表框架,并支持insert
    • 支持迭代器的实现
    • const
    • Key不能被修改
    • unordered_map支持[ ]
    • 结语

我们今天又见面啦,给生活加点impetus!!开启今天的编程之路!!
在这里插入图片描述
今天我们使用前面已经实现过的哈希表来实现myunordered_set和unordered_map
作者:٩( ‘ω’ )و260
我的专栏:C++进阶,C++初阶,数据结构初阶,题海探骊,c语言
欢迎点赞,关注!!

使用哈希表封装myunordered_set和myunordered_map

实现出复用哈希表框架,并支持insert

与map和set相比而言,unordered系列的实现更加复杂。
首先,unoedered_set是key类型,unordered_map是key,value类型,要实现一个底层实现两种数据结构,我们必须使用模版,这里我们传递三个参数,第一个是K,第二个是T,第三个是KeyOfT
三个模版的作用

第一个:传递K是为了find和erase接口,因为find和erase接口只能够使用key作为实参
第二个:代表哈希表中结点的存储类型
第三个:因为我们来寻找映射位置的时候需要取模,key一般可以直接取,但是pair必须需要取出其中的key

接下来我们来看代码:

template<class K>
class myunordered_set
{struct SetOfT{const K& operator(const K&key){return key;}}
public:private:HashTable<K,K,SetOfT> _tables;//底层结构是哈希桶
}
template<class K,class V>
class myunordered_map
{struct MapOfT{K& operator()(const pair<K,V>&kv){return kv.first;}}
private:HashTable<K,pair<K,V>,MapOfT> _tables;底层结构是哈希桶
}

因为存储的数值不确定,所以哈希结点也需要修改:

template<class T>
struct HashNode
{T _data;HashNode<K>*_next;HashNode(const T&data):_data(data),_next(nullptr){}
}

接下来我们来写insert函数,insert是重点,我们主要还写写的是伪代码。
Insert操作还是主题思路不变。
1:先求key映射的偏移位置(细节:key可能需要取,其次,可能需要转换成整形)这里会用到两层仿函数
2:不断头插
3:检查是否需要扩容(细节:定义的是哈希数组,而非一个哈希表,直接把结点给他拿下来就行)
4:注意返回值:我们直接模仿库中的insert函数返回pair<iterator,bool>类型(为什么我们实现这个insert函数重载?因为为了实现unordered_map支持operator[ ]做准备)
在这里插入图片描述
来看代码实现
注意:此时迭代器里面有两个成员变量,一个是_node,一个是哈希表,原因会在下面说.

pair<iterator,bool> Insert()(const T&data)
{KeyOfT kot;//取keyHash hs;//转整形,只有在取模的时候才用iterator it=Find(kot(data));if(it!=End()) return {it,false};//插入失败+去重if (_n == _tables.size()){//两种逻辑,优先第二种,第一种是拷贝结点,删除旧结点,第二种是直接把结点给拿下来//第一种:创建新的哈希表,第二种:创建新的数组//HashTable<K, V, Hash> newht(__stl_next_prime(_tables.size() + 1));//加1才能够继续取到更到的素数遍历旧表,将旧表的数据全部重新映射到新表//for (int i = 0;i < _tables.size();i++)//{//	Node* cur = _tables[i];//	while (cur)//	{//		newht.Insert(cur->_kv);//		cur = cur->_next;//	}//}//_tables.swap(newht._tables);//为什么第一种方法会重新再拷贝构造,因为复用的时候会调用new这个关键字vector<Node*> newtables(__stl_next_prime(_tables.size() + 1),nullptr);//数组初始化为n个nullptrfor (size_t i = 0;i < _tables.size();i++){Node* cur = _tables[i];while (cur){Node* next = cur->_next;//这里我们存储一下cur的下一个位置,因为当我们将cur下一个位置放下来的时候,_next被修改,所以需要提前记录一下//重新计算映射位置size_t hashi = hs(kot(cur->_data)) % newtables.size();cur->_next = newtables[hashi];newtables[hashi] = cur;cur = next;}//因为原来的旧链表的值已经被使用过了,所以我只直接将其置为nullptr_tables[i] = nullptr;}//底层是数组,例如vector或者string,调用库中的交换函数_tables.swap(newtables);}size_t hashi = hs(kot(data)) % _tables.size();Node* newnode = new Node(data);//这里不是new Node(kot(data));//pair类型结点里面存的是pair,不是key//优先选择头插进入链表,尾插需要向后遍历,头插分两种情况,映射位置为空或有数据,下面的代码两者都可以适用newnode->_next = _tables[hashi];_tables[hashi] = newnode;_n++;return {Iterator(newnode,this),true};
}

支持迭代器的实现

首先,因为哈希表中成员是一个单链表,所以我的的迭代器肯定是单向迭代器,即我们的迭代器只能支持++,不支持- -,同样也不支持随机访问。

迭代器的成员变量肯定是有一个_node。
当我们需要返回下一个位置的迭代器的时候,如果下一个位置不为空,那么迭代器中的指针直接向后走一步就可以了,如果下一个位置为空,就需要遍历到下一个不为空的位置的桶,返回桶的第一个位置即可。
此时我的cur都在遍历这个单链表了,我们根本找不到哈希表中下一个不为空的位置,那我们应该怎样找到下一个不为空的桶呢?我们必须传递一个哈希表过去!!
来看代码实现:
细节:这里我直接加上普通迭代器和const迭代器一起实现了,不然等下解释的太绕了
实现const迭代器的话,就会多2个模版参数,主要是返回值operator*和operator->。
而且,在迭代器内部有this指针,我们只用操作_node的指向即可

template<class K,class T,class Ref,class Ptr,class KeyOfT,class Hash>
struct HTIterator
{typedef HashNode<T> Node;typedef HashTable<K,T,KeyOfT,Hash> HT;typedef HTIterator<K,T,Ref,Ptr,keyofT,Hash>  Self;Node*_node;//成员变量HT*_pht;//成员变量Self& operator++(){if(_node->_next)//指向的下一个不为空{_node=_node->_next;}else{//下一个结点为空,需要向后找到不为空的桶KeyOfT kot;Hash hs;size_t hashi=hs(kot(_node->_data))%_pht->_tables.size();hashi++;//需要跳过当前桶while(hashi<_pht->_tables.size()){if(_pht->_tables[hashi]){_node=_pht->_tables[hashi];break;}++hashi;}if(hashi == _pht->_tables.size())//哈希表遍历遍历完了都还没有找到{_node=nullptr;}}return *this;}
}

接下来我再来实现迭代器中不重要的操作:
直接看代码即可:

Ref operator*()
{return _node->_data;
}
Ptr operator->()
{return &_node->_data;//箭头会返回对应结点的指针,编译器为了优化,自己会再添加一个箭头,这个箭头就是*.操作的结合
}
bool operator==(const Self& s)
{return _node == s._node;
}
bool operator!=(const Self& s)
{return _node != s._node;
}

const

const迭代器中迭代器部分我们已经完成了,接下来我们来看HashTable的部分。
这里需要解释Begin(),begin肯定是返回桶中链表的第一个结点即可

因为比较简单,直接来看代码即可:

Iterator Begin()//返回第一个桶的第一个结点
{if (_n == 0)return End();//此时没有结点,Begin()就是End()for (size_t i = 0;i < _tables.size();i++){if (_tables[i])return Iterator(_tables[i] ,this);}return End();//语法逻辑上来说必须要加,不能用运行逻辑来概括语法逻辑,万一里面的程序出错,可能就没有返回值了
}Iterator End()
{return Iterator(nullptr, this);
}//错误积累:如果报错不能将initializer list转换成啥,大概率编译器是将{}识别成这个作用了,但是我的目的是多参数来进行隐式类型转换
Const_Iterator Begin() const//返回第一个桶的第一个结点
{if (_n == 0)return End();for (size_t i = 0;i < _tables.size();i++){if (_tables[i]) return Const_Iterator(_tables[i], this);}return End();
}Const_Iterator End()const
{return Const_Iterator(nullptr, this);
}

Key不能被修改

这个也比较简单,只要将第二个模版参数对应的K修改为const K即可,随后对应的typedef部分也需要修改一下。

unordered_map支持[ ]

因为前面已经实现过,直接来看代码:

V& operator[](const K& key)
{pair<iterator, bool> ret = Insert({key,V()});//直接复用上面的Insert,本质上还是调用的底层return ret.first->second;
}

结语

感谢大家阅读我的博客,不足之处欢迎指正,感谢大家的支持
逆水行舟,楫摧而志愈坚;破茧成蝶,翼湿而心更炽!!加油!
在这里插入图片描述

相关文章:

使用哈希表封装myunordered_set和myunordered_map

文章目录 使用哈希表封装myunordered_set和myunordered_map实现出复用哈希表框架&#xff0c;并支持insert支持迭代器的实现constKey不能被修改unordered_map支持[ ]结语 我们今天又见面啦&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01…...

光学变焦和数字变倍模块不同点概述!

一、光学变焦与数字变倍模块的不同点 1. 物理基础 光学变焦&#xff1a;通过调整镜头组中镜片的物理位置改变焦距&#xff0c;实现无损放大。例如&#xff0c;上海墨扬的MF-STAR吊舱采用30倍光学变焦镜头&#xff0c;焦距范围6~180mm&#xff0c;等效焦距可达997mm。 数字…...

Spring MVC 中请求处理流程及核心组件解析

在 Spring MVC 中&#xff0c;请求从客户端发送到服务器后&#xff0c;需要经过一系列组件的处理才能最终到达具体的 Controller 方法。这个过程涉及多个核心组件和复杂的映射机制&#xff0c;下面详细解析其工作流程&#xff1a; 1. 核心组件与请求流程 Spring MVC 的请求处…...

《100天精通Python——基础篇 2025 第19天:并发编程启蒙——理解CPU、线程与进程的那些事》

目录 一、计算机基础知识1.1 计算机发展简史1.2 计算机的分类1.2.1 超级计算机&#xff08;Supercomputer&#xff09;1.2.2 大型机&#xff08;Mainframe Computer&#xff09;1.2.3 迷你计算机&#xff08;Minicomputer&#xff09;---- 普通服务器1.2.4 工作站&#xff08;W…...

<PLC><视觉><机器人>基于海康威视视觉检测和UR机械臂,如何实现N点标定?

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,相关设备如触摸屏(HMI)、交换机等工控产品,如果有…...

FC7300 WDG MCAL 配置引导

在WDG模块中,用户需要选择GPT资源,因此在配置WDG组件之前,需要先选择GPT通道。WDG包含三个组件,每一个组件对应不同的硬件。 Wdg:对应WDOG0Wdg_174_Instance1:对应WDOG1Wdg_174_Instance2:对应WDOG2一、WDG 组件 1. General Wdg Disable Allowed:是否允许在WDG运行过程…...

Leaflet 自定义瓦片地图与 PHP 大图切图算法 解决大图没办法在浏览器显示的问题

为什么使用leaflet 使用 Leaflet 来加载大图片&#xff08;尤其是通过瓦片化的方式&#xff09;是一种高效的解决方案&#xff0c;主要原因如下&#xff1a; 1. 性能优化 减少内存占用&#xff1a;直接加载大图片会占用大量内存&#xff0c;可能导致浏览器崩溃或性能下降。瓦片…...

MySQL——十、InnoDB引擎

MVCC 当前读&#xff1a; 读取的是记录的最新版本&#xff0c;读取时还要保证其他并发事务不能修改当前记录&#xff0c;会对读取的记录进行加锁。 -- 当前读 select ... lock in share mode(共享锁) select ... for update update insert delete (排他锁)快照读&#xff1a;…...

import pywinauto后tkinter.filedialog.askdirectory()无法调用,直接卡死,应如何解决

诸神缄默不语-个人技术博文与视频目录 具体情况就是我需要用pywinauto进行一些软件的自动化操作&#xff0c;同时需要将整个代码功能用tkinter的可视化界面来展示&#xff0c;在调用filedialog.askdirectory()的时候代码直接不运行了&#xff0c;加载不出来。我一开始还以为是…...

display:grid网格布局属性说明

网格父级 &#xff1a;display:grid&#xff08;块级网格&#xff09;/ inline-grid&#xff08;行内网格&#xff09; 注意&#xff1a;当设置网格布局&#xff0c;column、float、clear、vertical-align的属性是无效的。 HTML: <ul class"ls02 f18 mt50 sysmt30&…...

初识——QT

QT安装方法 一、项目创建流程 创建项目 入口&#xff1a;通过Qt Creator的欢迎页面或菜单栏&#xff08;文件→新建项目&#xff09;创建新项目。 项目类型&#xff1a;选择「Qt Widgets Application」。 路径要求&#xff1a;项目路径需为纯英文且不含特殊字符。 构建系统…...

力扣-78.子集

给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 class Solution {List<List<Integer>> res new ArrayList<>();List<I…...

python中字符串的操作

‌1. 字符串创建‌ 使用单引号、双引号或三引号创建字符串三引号适用于多行字符串&#xff0c;且可以自由包含单双引号原始字符串使用r前缀&#xff0c;如r’Hello\nWorld’会原样输出\n ‌2. 基本操作‌ 拼接&#xff1a;使用运算符或join()方法复制&#xff1a;使用*运算符…...

《Elasticsearch 源码解析与优化实战》笔记

术语 思维导图 基础和环境 1-2 主要流程 3-10 内部模块 11-17 优化和诊断 18-22 资料 https://elasticsearchbook.com/...

华为网路设备学习-22(路由器OSPF-LSA及特殊详解)

一、基本概念 OSPF协议的基本概念 OSPF是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;主要用于在自治系统&#xff08;AS&#xff09;内部使路由器获得远端网络的路由信息。OSPF是一种链路状态路由协议&#xff0c;不直接传递路由表&#xff0c;而是通过交换链路…...

多线程(四)

目录 一 . 单例模式 &#xff08;1&#xff09;什么是设计模式&#xff1f; &#xff08;2&#xff09;饿汉模式 &#xff08;3&#xff09;懒汉模式 二 . 指令重排序 今天咱们继续讲解多线程的相关内容 一 . 单例模式 &#xff08;1&#xff09;什么是设计模式&am…...

【设计模式】- 结构型模式

代理模式 给目标对象提供一个代理以控制对该对象的访问。外界如果需要访问目标对象&#xff0c;需要去访问代理对象。 分类&#xff1a; 静态代理&#xff1a;代理类在编译时期生成动态代理&#xff1a;代理类在java运行时生成 JDK代理CGLib代理 【主要角色】&#xff1a; 抽…...

python报错:使用json.dumps()时,报错type xxx is not json serializable错误原因及解决方案

文章目录 一、错误原因分析二、解决方案1. **自定义对象序列化方法一&#xff1a;使用default参数定义转换逻辑方法二&#xff1a;继承JSONEncoder类统一处理 2. **处理特殊数据类型场景一&#xff1a;datetime或numpy类型场景二&#xff1a;bytes类型 3. **处理复杂数据结构 三…...

Vue3中实现轮播图

目录 1. 轮播图介绍 2. 实现轮播图 2.1 准备工作 1、准备至少三张图片&#xff0c;并将图片文件名改为数字123 2、搭好HTML的标签 3、写好按钮和图片标签 ​编辑 2.2 单向绑定图片 2.3 在按钮里使用方法 2.4 运行代码 3. 完整代码 1. 轮播图介绍 首先&#xff0c;什么是…...

flutter缓存网络视频到本地,可离线观看

记录一下解决问题的过程&#xff0c;希望自己以后可以参考看看&#xff0c;解决更多的问题。 需求&#xff1a;flutter 缓存网络视频文件&#xff0c;可离线观看。 解决&#xff1a; 1&#xff0c;flutter APP视频播放组件调整&#xff1b; 2&#xff0c;找到视频播放组件&a…...

2025年Ai写PPT工具推荐,这5款Ai工具可以一键生成专业PPT

上个月给客户做产品宣讲时&#xff0c;我对着空白 PPT 页面熬到凌晨一点&#xff0c;光是调整文字排版就改了十几版&#xff0c;最后还是被吐槽 "内容零散没重点"。后来同事分享了几款 ai 写 PPT 工具&#xff0c;试完发现简直打开了新世界的大门 —— 不用手动写大纲…...

【深度学习】#11 优化算法

主要参考学习资料&#xff1a; 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李牧学AI 目录 深度学习中的优化挑战局部极小值鞍点梯度消失 凸性凸集凸函数 梯度下降一维梯度下降学习率局部极小值 多元梯度下降 随机梯度下降随机梯度更新动态学习率…...

数学复习笔记 13

前言 继续做线性相关的练习题&#xff0c;然后做矩阵的例题&#xff0c;还有矩阵的练习题。 646 A 明显是错的。因为假设系数全部是零&#xff0c;就不是线性相关了。要限制系数不全是零&#xff0c;才可以是线性相关。 B 这个说法好像没啥问题。系数全为零肯定线性组合的结…...

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月16日第79弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀6-8个和值&#xff0c;可以做到100-300注左右。 (1)定…...

阳台光伏+储能:安科瑞智能计量仪表来助力

随着可再生能源的普及和家庭储能需求的增长&#xff0c;阳台光伏储能系统逐渐成为家庭能源管理的新趋势。如何精准计量储能系统的发电量、用电量及电网交互数据&#xff0c;成为优化能源利用效率的关键。安科瑞计量仪表凭借高精度、多功能及智能化特性&#xff0c;为家庭阳台储…...

Unable to determine the device handle for GPU 0000:1A:00.0: Unknown Error

Unable to determine the device handle for GPU 0000:1A:00.0: Unknown Error 省流&#xff1a;我遇到这个问题重置bios设置就好了 这个错误信息表明系统无法识别或访问GPU&#xff08;0000:1A:00.0&#xff09;&#xff0c;通常与CUDA、驱动程序或硬件相关。以下是可能的原…...

多态性标记设计

1.确定区间 2.获取该区间内的序列&#xff0c;如果只有一个位置&#xff0c;可以前后扩100bp 使用ncbi primer blast进行引物设计&#xff08;https://blast.ncbi.nlm.nih.gov/Blast.cgi&#xff09;...

Jenkins 最佳实践

1. 在Jenkins中避免调度过载 过载Jenkins以同时运行多个作业可能导致资源竞争、构建速度变慢和系统性能问题。分配作业启动时间可以防止瓶颈&#xff0c;并确保更顺畅的执行。如何实现&#xff1f; 在Cron表达式中使用H&#xff1a;引入抖动&#xff08;jitter&#xff09;&a…...

如何查询Ubuntu系统中最大的几个目录以G单位显示大小,从大到小排列?

环境&#xff1a; Ubuntu 20,04 问题描述&#xff1a; 如何查询系统中最大的几个目录以G单位显示大小&#xff0c;从大到小排列&#xff1f; 解决方案&#xff1a; 想查看整个系统&#xff08;单一文件系统内&#xff09;最大的20个目录&#xff0c;结果按大小从大到小排序…...

深入浅出拆分学习,图神经网络拆分学习,混合联邦学习

深入浅出解析拆分学习&#xff08;Split Learning&#xff09;、图神经网络拆分学习&#xff08;Split Learning for Graph Neural Networks&#xff09;以及混合联邦学习&#xff08;Hybrid Federated Learning&#xff09;&#xff0c;这三者都体现了在分布式数据环境下进行机…...

DDD领域驱动介绍

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…...

ubuntu22鼠键失灵恢复记录笔记chatgpt解决

ChatGPT 说&#xff1a; 你提到“Ubuntu 22 鼠键失灵”&#xff0c;这个问题可能涉及以下几方面&#xff1a; &#x1f9ed; 先确认问题 是鼠标问题还是键盘问题&#xff0c;还是触控板&#xff1f; “鼠键”一般理解为“鼠标键”&#xff0c;请确认你是指鼠标左键/右键失灵&a…...

在服务器上安装AlphaFold2遇到的问题(1)

犯了错误&#xff0c;轻信deepseek&#xff0c;误将cuDNN8.9.7删掉 [rootlocalhost ~]# cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 #define CUDNN_MAJOR 8 #define CUDNN_MINOR 9 #define CUDNN_PATCHLEVEL 7 -- #define CUDNN_VERSION (CUDNN_MA…...

ch10 题目参考思路

ch10 - 最小生成树 有线通讯网 知识点&#xff1a;Prim 算法思路&#xff1a; 该题要求对 n 座城市铺设 n - 1 条光缆&#xff0c;并要求所有城市连通&#xff0c;那本质上是一棵树&#xff0c;又要求铺设光缆的费用最低&#xff0c;即要求选取的 n - 1 条光缆的长度最小&…...

Hudi、Iceberg 、 Paimon 数据湖选型对比

Hudi、Iceberg 和 Paimon 是当前数据湖领域的三大主流开源框架,均致力于解决数据湖场景下的增量更新、事务支持、元数据管理、流批统一等核心问题,但设计理念和适用场景存在差异。以下从技术特性、适用场景和选型建议三方面对比分析: 一、核心技术特性对比 维度HudiIceberg…...

2025认证杯数学建模第二阶段A题完整论文(代码齐全):小行星轨迹预测思路

2025认证杯数学建模第二阶段A题完整论文&#xff08;代码齐全&#xff09;:小行星轨迹预测思路,详细内容见文末名片 第二阶段问题 1 分析 问题起源与相关性&#xff1a;为了更全面地评估近地小行星对地球的潜在威胁&#xff0c;需要对其轨道进行长期预测。三个月内的观测数据为…...

信息安全基础知识

信息系统 信息系统能进行&#xff08;数据&#xff09;的采集、传输、存储、加工&#xff0c;使用和维护的计算机应用系统 例如&#xff1a;办公自动化、CRM/ERP、HRM、12306火车订票系统等。 信息安全 信息安全是指保护信息系统中的计算机硬件、软件、数据不因偶然或者恶意…...

UE RPG游戏开发练手 第二十六课 普通攻击1

UE RPG游戏开发练手 第二十六课 普通攻击1 1.定义攻击的InputTag MyGameplayTags.h代码 RPGGAMETEST_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_LightAttack_Axe);MyGameplayTag.cpp代码 UE_DEFINE_GAMEPLAY_TAG(InputTag_LightAttack_Axe, "InputTag.LightAttack.Ax…...

SAP ABAP 程序中归档数据读取方式

上一篇文章记录了字段目录&#xff0c;归档信息结构&#xff0c;这篇文章记录如何通过字段目录&#xff0c;归档信息结构&#xff0c;归档对象读取归档数据。未归档数据是从数据库表直接抽取&#xff0c;本样例是通过归档读取方式复写sql。 发布时间&#xff1a;2025.05.16 示…...

每周资讯 | 腾讯Q1财报:国内游戏业务收入同比增长24%;Tripledot 8亿美元收购AppLovin游戏业务

内容速览&#xff1a; 广州“服务贸易和数字贸易22条”助推游戏产业发展Tripledot Studios 8亿美元收购AppLovin游戏业务苹果紧急申请暂停执行AppStore新规4月中国手游出海收入下载榜&#xff0c;点点互动《Kingshot》收入激增 腾讯Q1财报&#xff1a;国内游戏业务收入同比增长…...

iOS SwiftUI的具体运用实例(SwiftUI库的运用)

最近接触到一个 SwiftUI的第三方框架&#xff0c;它非常的好用。以下是 具体运用实例&#xff0c;结合其核心功能与开发场景&#xff0c;分多个维度进行详细解析&#xff1a; 一、基础 UI 组件开发 登录界面 SwiftUI 的 VStack、TextField 和 Button 可快速构建用户登录表单。例…...

杰理ac696配置sd卡随机播放

#define FCYCLE_LIST 0 // 列表循环&#xff08;按顺序播放文件列表&#xff09; #define FCYCLE_ALL 1 // 全部循环&#xff08;播放完所有文件后重新开始&#xff09; #define FCYCLE_ONE 2 // 单曲循环&#xff08;重复播放当前文件&#xff09; #define …...

MCP协议的核心机制和交互过程

MCP的核心是JSON-RPC 2.0 MCP使用了 JSON-RPC 2.0 作为client和server端的消息传输。JSON-RPC 2.0是一个用JSON编码的轻量级远程过程调用协议。它的优越性如下: 易读,易调试与编程语言无关,环境无关技术成熟,规范清晰且应用广泛JSON-NPC 2.0定义了request、response、noti…...

论信息系统项目的范围管理

论信息系统项目的范围管理 前言一、规划范围管理&#xff0c;收集需求二、定义范围三、创建工作分解结构四、确认范围五、控制范围 前言 为了应对烟草零售客户数量大幅度增长所带来的问题&#xff0c;切实履行控烟履约的相关要求&#xff0c;同时也为了响应国务院“放管服”政策…...

米勒电容补偿的理解

米勒电容补偿是使运放放大器稳定的重要手法&#xff0c;可以使两级运放的两个极点分离&#xff0c;从而可以得到更好的相位裕度。 Miller 电容补偿的本质是增加一条通路流电流&#xff0c;流电流才是miller效应的本质。给定一个相同的输入&#xff0c;Miller 电容吃掉的电流比…...

力扣654题:最大二叉树(递归)

小学生一枚&#xff0c;自学信奥中&#xff0c;没参加培训机构&#xff0c;所以命名不规范、代码不优美是在所难免的&#xff0c;欢迎指正。 标签&#xff1a; 二叉树、递归 语言&#xff1a; C 题目&#xff1a; 给定一个不重复的整数数组 nums 。最大二叉树可以用下面的算…...

Go语言实现生产者-消费者问题的多种方法

Go语言实现生产者-消费者问题的多种方法 生产者-消费者问题是并发编程中的经典问题&#xff0c;涉及多个生产者生成数据&#xff0c;多个消费者消费数据&#xff0c;二者通过缓冲区&#xff08;队列&#xff09;进行协调&#xff0c;保证数据的正确传递和同步。本文将从简单到…...

深度学习驱动下的目标检测技术:原理、算法与应用创新(二)

三、主流深度学习目标检测算法剖析 3.1 R - CNN 系列算法 3.1.1 R - CNN 算法详解 R - CNN&#xff08;Region - based Convolutional Neural Networks&#xff09;是将卷积神经网络&#xff08;CNN&#xff09;应用于目标检测领域的开创性算法&#xff0c;其在目标检测发展历…...

提权脚本Powerup命令备忘单

1. 获取与加载 从 GitHub 下载&#xff1a;(New-Object Net.WebClient).DownloadFile("https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1", "C:\Temp\PowerUp.ps1")本地加载&#xff1a;Import-Module .\Power…...

人工智能 (AI) 在无线接入网络 (RAN) 中的变革性作用

随着电信行业向更智能、更高效的系统迈进&#xff0c;将 AI 集成到 RAN 中已不再是可有可无&#xff0c;而是至关重要。 随着 6G 时代的到来&#xff0c;人工智能 (AI) 有望降低运营成本&#xff0c;并带来更大的盈利机会。AI-RAN 正处于这一变革的前沿&#xff0c;在 RAN 环境…...