C++初阶-string类的模拟实现3
目录
1.string::find(char ch,size_t pos=0) const的模拟实现
2.string::find(const char* str,size_t pos=0) const的模拟实现
3.string::size() const和string::capacity() const的模拟实现
4.string::operator[] (size_t pos)和string::operator[] (size_t pos) const的模拟实现
5.string::begin()和string::end()的实现
6.string::substr(size_t pos = 0, size_t len=npos) const的模拟实现
7.string::string(const string& s)的模拟实现
8.string::operator=(const string& str)的模拟实现
9.非成员函数的关系运算符的重载
10.std::operator>>和std::operator<<的模拟实现
11.string::clear()的模拟实现
12.总结
1.string::find(char ch,size_t pos=0) const的模拟实现
这个实现起来比较简单,思路:
由于string类底层是连续存储的,所以我们可以用for循环或者之后实现了begin()、end()后也可以用迭代器的方式来遍历string类,最后找到对应的字符即可,代码如下:
//.h
size_t find(char ch,size_t pos = 0) const;
//.cpp
size_t string::find(char ch, size_t pos) const
{for (size_t i = 0; i < _size; i++){if (_str[i] == ch){return i;}}//如果没找到返回nposreturn npos;
}
这个函数实现起来比较简单,就不进行演示了。
2.string::find(const char* str,size_t pos=0) const的模拟实现
这个函数的实现是需要借助C语言学过的strstr函数的,通过匹配来得到开始的下标,但是由于strstr返回的是指针,所以我们要返回的是返回值-开始位置(顺序表),但是在这之前还需要判断是否有找到,一般没找到会返回nullptr(NULL),这时候我们就要返回npos了,代码实现如下:
//.h
size_t find(const char* str,size_t pos = 0) const;
//.cpp
size_t string::find(const char* str, size_t pos)const
{//由于是在pos位置开始找,所以传的是_str+posconst char* p = strstr(_str + pos, str);if (p == nullptr){return npos;}return p - _str;
}
3.string::size() const和string::capacity() const的模拟实现
这个实现很简单,所以就不做过多解释了,但是我们要注意,由于函数短小,所以我们可以直接把它的定义放到.h文件中:
//.h
size_t size() const
{return _size;
}
size_t capacity() const
{return _capacity;
}
4.string::operator[] (size_t pos)和string::operator[] (size_t pos) const的模拟实现
这两个都是运算符重载,只是一个可以修改另外一个不可修改而已,我们只要传入pos后返回_str[pos]即可,当然我们还需要检查合法性,用assert即可,且由于函数比较短,所以我们直接在.h文件中定义:
//.h
char& operator[] (size_t pos)
{assert(pos < _size);return _str[pos];
}
const char& operator[] (size_t pos) const
{assert(pos < _size);return _str[pos];
}
5.string::begin()和string::end()的实现
begin的实现是直接返回_str,而end的实现是返回_str+_size;返回的是迭代器,我们可以视为一个指针,所以我们之间返回即可,而且有两个版本,一个是可以修改另外一个是不可以修改的,而且由于函数短小,可以把它定义在.h文件中,这个是比较简单的,所以我就不作过多讲解了:
//.h
//这iterator就相当于char*的别名,学完string类之后会细讲
typedef char* iterator;
typedef const char* const_iterator;
iterator begin()
{return _str;
}
iterator end()
{return _str + _size;
}
const_iterator begin() const
{return _str;
}
const_iterator end() const
{return _str + _size;
}
迭代器我们现在用的不多,不过我可以演示一下它的用法:
//.cpp
void test1()
{string s("Hello world");string::iterator it = s.begin();while (it != s.end()){cout << *it << " ";it++;}cout << endl;//也支持范围for//前提是已经实现了begin()和end()函数for (auto ch : s){cout << ch << " ";}cout << endl;
}
运行结果如下:
这是迭代器的基本用法,我只在这里简单讲解一下用法。
6.string::substr(size_t pos = 0, size_t len=npos) const的模拟实现
这个函数的实现比之前复杂一些,这里讲一下实现步骤:
这个函数是拷贝从pos位置开始的len个字符,但是如果我们直接取len个字符会超出范围,所以我们要提前进行判断;
其次由于返回值为string类,所以我们如果临时创建一个新对象去返回,那么这个是不行的,因为空间释放了,所以我们需要用一个拷贝构造函数,因为不然我们就是用一个对象去接受返回值的,但是拷贝构造我们暂时没实现,这个我先实现了之后再写的这个函数就不会有问题了,所以我写的代码是在已经实现拷贝构造的情况下写的,拷贝构造函数等下会实现:
//.h
string substr(size_t pos = 0,size_t len = npos) const;
//.cpp
string string::substr(size_t pos, size_t len) const
{size_t leftlen = _size - pos;//判断是否是真实长度//也可以用!=if (len > leftlen){len = leftlen;}string tmp;//申请len个空间tmp.reserve(len);for (size_t i = 0; i < len; i++){//尾插tmp += _str[pos + i];}return tmp;
}
我们来测试一下这个函数:
//.cpp
void test1()
{string s("Hello world");string s1(s.substr(6));cout << s.c_str() << endl;cout << s1.c_str() << endl;
}
运行结果如下:
当然我们也可以用在其他地方,比如赋值上,但是这个函数暂时还没有实现,是浅拷贝。
7.string::string(const string& s)的模拟实现
这个是拷贝构造函数,由于我们拷贝构造是用一个已经实例化的对象去创建另外一个对象,所以我们需要先申请内存,而且这个空间必须要包含\0,所以我们要申请的是_capacity+1个空间;而且我们之后还要拷贝原对象的值到另外一个对象上,并把_size和_capacity都传递过去,所以代码实现如下:
//.h
string(const string& s);
//.cpp
string::string(const string& s)
{//我们需要多申请一块空间,因为我们还要存储\0_str = new char[s._capacity + 1];strcpy(_str, s._str);_size = s._size;_capacity = s._capacity;
}
8.string::operator=(const string& str)的模拟实现
这个函数的实现和拷贝构造函数的实现差不多,只是它返回值是对象的拷贝而已,而且返回的不是新对象,而是对象的拷贝,所以实现步骤如下:
如果遇到自己拷贝自己的情况我们需要直接返回*this,而不是继续运行!
我们需要先开辟新空间并释放旧空间!
再把数据拷贝过去后把_size和_capacity也复制过去;
最后返回*this即可。
代码实现如下:
//.h
string& operator=(const string& s);
//.cpp
string& string::operator=(const string& s)
{if(this==&s){return* this;}//开辟新空间,释放旧空间delete[] _str;_str = new char[s._capacity + 1];strcpy(_str, s._str);_size = s._size;_capacity = s._capacity;return *this;
}
这个函数就不测试了,实现也是比较简单的。
9.非成员函数的关系运算符的重载
关系运算符包括以下函数:
我们只实现两个参数都是string类型的,而且我就不把它们置为友元函数了,直接置为成员函数,由于函数比较短小我们也可以把定义放在.h文件中,也可以不放入,我这里就不放入了:
//.h
bool operator==(const string& s) const;
bool operator!=(const string& s) const;
bool operator<(const string& s) const;
bool operator<=(const string& s) const;
bool operator>(const string& s) const;
bool operator>=(const string& s) const;
//.cpp
bool string::operator==(const string& s) const
{return strcmp(_str,s._str);
}
bool string::operator!=(const string& s) const
{return !(*this == s);
}
bool string::operator<(const string& s) const
{return strcmp(_str, s._str) > 0;
}
bool string::operator<=(const string& s) const
{return *this < s || *this == s;
}
bool string::operator>(const string& s) const
{//也可以return !(*this<=s)return strcmp(_str, s._str) < 0;
}
bool string::operator>=(const string& s) const
{return !(*this < s);
}
10.std::operator>>和std::operator<<的模拟实现
这两个操作符只有一个要注意的点,那就是它们一定要成为全局函数,但不一定要成为类的友元函数。这是一个额外的知识,其次,我们要注意的点是流提取(>>)这个需要在遇到' '或者'\n'时停止插入,所以最终代码如下(其中涉及到clear函数,这个之后会讲)其中的>>是有问题的,因为这个涉及到隐秘的申请,需要到进阶版本才能真的讲完:
//.cpp
ostream& operator<<(ostream& out, const string& s)
{for (auto ch : s){out << ch;}return out;
}
istream& operator>>(istream& in, string& s)
{char ch;in >> ch;while (ch != ' ' && ch != '\n'){s += ch;in >> ch;}return in;
}
11.string::clear()的模拟实现
这个函数非常简单,我都不想讲的,只要把_str='\0'并把_size=0即可,就相当于erase所有数据后把_size=0;不过我们直接用赋值就可以实现了,由于函数比较短小,所以我就在.h文件中定义了:
//.h
void clear()
{//赋值_str[0] = '\0';_size = 0;
}
12.总结
这一讲的内容比较多,但是内容都比较简单,所以注意的点也不是很多,现在已经把重要的函数都实现完了,但是下一讲会把这些初级版本进行优化,也就是说,这个不是最终版本,最终的版本虽然实现比较复杂了,但是总归还是效率提升了,比如:我们如果一个一个字符提取,那么效率非常低,并且这个>>是有问题的,它涉及到其他的知识,下一讲一起讲了。
喜欢的可以一键三连哦!下讲再见!
相关文章:
C++初阶-string类的模拟实现3
目录 1.string::find(char ch,size_t pos0) const的模拟实现 2.string::find(const char* str,size_t pos0) const的模拟实现 3.string::size() const和string::capacity() const的模拟实现 4.string::operator[] (size_t pos)和string::operator[] (size_t pos) const的模拟…...
接口出现 请求参数格式错误 的解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理…...
MYSQL时间函数、group by 和partition by的区别、组内编号leetcode学习
mysql时间函数 select now(); --当前时间 select current_date() --当前日期 select current_timestamp --同now()select date(2025-04-14 12:34:56) --提取日期部分:2025-04-14 select datediff(2025-4-14,2025-04-10) 日期相差四天 select date_sub(2024-04-14,…...
OpenCV 的 CUDA 模块中用于将一个多通道 GpuMat 图像拆分成多个单通道图像的函数split()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::split 是 OpenCV CUDA 模块中的一个函数,用于将一个多通道的 GpuMat 图像拆分成多个单通道的 GpuMat 图像。这个函数是 CP…...
吴恩达机器学习笔记:单变量线性回归
通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果房子是 1250 平方尺大小,你要告诉…...
UI自动化测试框架:PO 模式+数据驱动
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成…...
NestJS 知识框架
一、核心概念 1. 架构基础 基于 Express/Fastify 的 Node.js 框架 采用模块化设计 使用 TypeScript 构建(也支持 JavaScript) 借鉴 Angular 的设计理念 2. 主要组件 模块 (Module): 应用的基本组织单元 控制器 (Controller): 处理 HTTP 请求 服务…...
Porting Linux to a new processor architecture, part 1: The basics
Although a simple port may count as little as 4000 lines of code—exactly 3,775 for the mmu-less Hitachi 8/300 recently reintroduced in Linux 4.2-rc1—getting the Linux kernel running on a new processor architecture is a difficult process. Worse still, the…...
Dagster Pipes系列-1:调用外部Python脚本
本文是"Dagster Pipes教程"的第一部分,介绍如何通过Dagster资产调用外部Python脚本并集成到数据管道中。首先,创建Dagster资产subprocess_asset,利用PipesSubprocessClient资源执行外部脚本external_code.py,实现跨进程…...
北京傲云源墅——区域价值腾飞的高端之选
在北京这座繁华都市中,房产的价值往往与区域的发展潜力息息相关。而傲云源墅项目,正位于极具价值的孙河墅区,这片土地正发生着令人瞩目的蝶变。近年来,孙河区域的崛起引人注目。2025 年 3 月,北京朝阳区平房乡黄杉木店…...
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析 什么是 yarn eject?React 项目执行 yarn eject 后的 package.json 变化详解1. 脚本部分 Scripts 被替换2. 新增构建依赖 dependencies(部分)3. 新增 Babel …...
编写一个处理txt的loader插件,适用于wbepack
处理txt的webpack的loader插件 编写一个处理txt的loader插件,适用于wbepack 编写一个处理txt的loader插件,适用于wbepack 实现一个处理txt的插件,给文本每行前后添加**** module.exports function txtLoader(content) {// 确保 Loader 是异…...
高速边坡监测成本高?自动化如何用精准数据省预算?
高速边坡自动化监测解决方案 一、边坡监测的概述 1.1 边坡监测的背景 我国山地丘陵约占国土面积的65%,且地质地貌复杂,气候类型多样,构成活动频繁,自然灾害隐患多,分布广。而且近年来由于高速公路边坡滑坡灾害引发的事…...
SysAid On-Prem XML注入漏洞复现(CVE-2025-2776)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…...
WEB安全--RCE--webshell bypass2
继WEB安全--RCE--webshell bypass的补充: 六、PHP反序列化 webshell: <?php $s unserialize(a:2:{i:0;O:8:"stdClass":1:{s:1:"a";i:1;}i:1;r:2;}); $c "123"; $arr get_declared_classes(); $i0;for($i;$i<c…...
Spark处理过程-转换算子和行动算子
(一)RDD的处理过程 RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使 用,直到最后一个RDD经过“行动”操作才会真正被计算处理。 1.延迟。RDD中所有的转换都是延迟的&…...
Spring Boot 配置文件敏感信息加密:Jasypt 实战
目录 1. 为什么需要加密配置文件? 2. Jasypt 快速集成 2.1 在xml文件中添加 Maven 依赖 2.2 生成加密字符串 编辑 编辑 3. 安全最佳实践 4. 常见问题 Q1:加密后启动报错? Q2&…...
c++STL-vector的模拟实现
cSTL-vector的模拟实现 vector的模拟实现基本信息构造函数析构函数返回容量(capacity)返回元素个数(size)扩容(reserve和resize)访问([])迭代器(**iterator**)…...
【Python 变量类型】
Python 是一种动态类型语言,变量类型在运行时自动确定,无需显式声明。以下是 Python 中核心变量类型的分类与用法详解: 一、基本数据类型 1. 数值类型 整数 (int) 支持正负数、零和二进制/八进制/十六进制表示: a 42 b 0o52 #…...
2.2 微积分的解释
第一阶段:曲直转化的数学革命 原始困境: 几何局限:古希腊几何仅能计算矩形/三角形等直线图形面积现实需求:17世纪弹道轨迹、行星轨道等曲线相关计算需求激增关键矛盾:直线数学工具(如毕达哥拉斯定理&…...
如何使用Selenium?
Selenium 是一个用于 Web 自动化测试 的开源工具套件,支持多种浏览器和编程语言。它最初是为测试 Web 应用而设计,但也被广泛用于 网页数据抓取 和 自动化操作。 Selenium 的核心组件 Selenium WebDriver 直接控制浏览器,模拟用户操作&…...
SVN 中文路径访问报错(权限已正确分配)
问题:SVN 中文路径访问报错(权限已正确分配) 原因: 1、URL特殊字符未转义 路径中包含空格、中文括号()等特殊符号,未进行URL编码 中文括号()示例:(设计)需转为%28%E8%AE%BE%E8%AE%A1%29,空格需…...
【Python 基础语法】
Python 基础语法是编程的基石,以下从核心要素到实用技巧进行系统梳理: 一、代码结构规范 缩进规则 使用4个空格缩进(PEP 8标准)缩进定义代码块(如函数、循环、条件语句) def greet(name):if name: # 正确缩…...
讲讲git 和svn
讲讲git 和svn 目录Git到底是什么?它该怎末用?核心概念基础操作1. 仓库的创建2. 文件的提交工作流程3. 分支管理4. 远程仓库操作 进阶操作实际应用建议**基本用法****常用命令的帮助示例****帮助文档的结构****替代方法****练习建议****核心概念****与Gi…...
运用数组和矩阵对数据进行存取和运算——NumPy模块 之四
目录 NumPy模块介绍 3.4 NumPy 数组重塑与转置 3.4.1 操作机制的理论逻辑 3.4.2 一维数组的重塑 3.4.3 多维数组的重塑 3.4.4 数组的转置操作 3.4.5 知识点总结与课程回顾 3.4.6 课后练习题 NumPy模块介绍 NumPy 是 Python 科学计算领域的重要基石,与当前 “躺吃旅行…...
机器学习第六讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列
机器学习第六讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:…...
服务器多JAR程序运行与管理指南
在同一台服务器上同时运行多个JAR程序是完全可以的,但需要注意以下几点以确保稳定性和性能: 关键注意事项 端口冲突 如果JAR程序是网络服务(如Web应用),确保每个程序监听不同的端口(例如:8080、…...
vue实现进度条带指针
效果最终 function calculatePointerPosition(value) {if (value < 2.6) return 12.5; // 非常差位置if (value < 5.1) return 37.5; // 较差位置if (value < 7.1) return 62.5; // 良好位置return 90; // 非常满意位置 }function getStatusText(value) {if (valu…...
【C++】智能指针
前言 上文我们学到了C11的异常,了解到了C与C语言处理错误的区别,异常的特点在于抛出与接收。【C11】异常-CSDN博客 本文我们来学习C中的下一个功能:智能指针 1.智能指针的使用场景 在上文我们知道了抛异常的知识,抛异常的“抛”这…...
Adobe Acrobat pro在一份PDF中插入空白页
在Adobe Acrobat pro中先打开我们的PDF文件; 用鼠标点击需要插入空白页处的上一页; 然后如下图操作: 默认会在光标处的下一页插入一张空白页,你也可以修改插入页的页码或者向前一页插入...
Oracle adg环境下调整redo日志组以及standby日志组大小
1.在adg环境中,调整redo日志组大小以及standby日志组大小主要思路如下: a、先备库增加standby redo 删除老standby redo, b、然后主库增加redo删除老redo, c、备库增加新redo删除老redo, d、最后主库增加standby redo。 #主库 [oracleDB196 ~]$ sql / a…...
Nlog适配达梦数据库进行日志插入
前言 原来使用的是SQLServer数据库,使用Nlog很流畅,没有什么问题。现在有个新项目需要使用麒麟操作系统和达梦数据库,业务流程开发完成之后发现Nlog配置文件中把数据库连接内容修改之后不能执行插入操作。 原Nlog.config配置 <?xml ve…...
记一次redis未授权被种挖矿
#挖矿程序 /etc/httpgd /etc/nnt.sh #大小问 #定时任务名为root /var/spool/cron/root 内容:*/50 * * * * sh /etc/nnt.sh >/dev/null 2>&1 定时任务只有所有者可以写,且chmod修改权限失败。 #先查看定时任务的拓展属性,不可变(i…...
Docker私有仓库实战:官方registry镜像实战应用
抱歉抱歉,离职后反而更忙了,拖了好久,从4月拖到现在,在学习企业级方案Harbor之前,我们先学习下官方方案registry,话不多说,详情见下文。 注意:下文省略了基本认证 TLS加密ÿ…...
LeetCode 热题 100_只出现一次的数字(96_136_简单_C++)(哈希表;哈希集合;排序+遍历;位运算)
LeetCode 热题 100_只出现一次的数字(96_136_简单_C) 题目描述:输入输出样例:题解:解题思路:思路一(哈希表):思路二(哈希集合):思路三…...
基于FastAPI框架的日志模块设计
以下是一个基于FastAPI框架设计的日志模块,结合SQLite数据库实现增删改查功能的完整实现方案: 1. 项目结构 your_project/ ├── app/ │ ├── logs/ # 日志模块目录 │ │ ├── models.py # 数据库模型定义 │ │ …...
网页禁止粘贴的解决方法(以学习通网页为例)
网页禁止粘贴的解决方法(以学习通网页为例) 学数据挖掘,学习通过作业的简答题要英文做答还竟然不能复制粘贴,受不了了 下面给出解决办法 1.想着是网页JS的问题,既然不能直接粘贴,那就在源码里面修改 2.于…...
Linux常用命令详解(下):打包压缩、文本编辑与查找命令
一、打包压缩命令 在Linux系统中,打包与压缩是文件管理的核心操作之一。不同的工具适用于不同场景,以下是最常用的命令详解: 1. tar命令 作用:对文件进行打包、解包、压缩、解压。 语法: tar [选项] [压缩包名] […...
前端面经 计网 http和https区别
HTTP 超文本传输 忒点: 支持CS 客户/服务器模式 方便快捷 简单 允许传输任意类型的数据 在报文头中的Content-Type中声明 无连接,一次连接仅处理一个请求 无状态 不保留上一次的状态 HTTPS 解决HTTP明文传输 在HTTP基础上增加SSL协议 HTTP版本 …...
mac一键安装gpt-sovit教程中,homebrew卡住不动的问题
mac一键安装gpt-sovit教程 仅作为安装过程中解决homebrew卡住问题的记录 资源地址 https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/znoph9dtetg437xb#mlAoP 下载一键包 下载后并解压,找到install for mac.sh,终端执行bash空格拖拽in…...
05_jdk8新特性
文章目录 一、jdk8新特性1. Lambda表达式2. Stream API3. 函数式接口4. 默认方法5. 方法引用6. 新的日期和时间API7. Optional类8. 并发增强 二、常用函数式接口1. Supplier<T>2. Consumer<T>3. Function<T,R>4. Predicate<T> 一、jdk8新特性 JDK 8&a…...
解决IDEA Maven编译时@spring.profiles.active@没有替换成具体环境变量的问题
如果不加filtering true,编译后的文件还是 spring.profiles.active 编译前的application.yml 编译后的application.yml【环境变量没有改变】 解决方案 找到 SpringBoot 启动类所在的pom.xml,在 resources 增加 filtering true,然后重新…...
HTML17:表单初级验证
表单初级验证 常用方式 placeholder 提示信息 <p>名字:<input type"text" name"username" maxlength"8" size"30" placeholder"请输入用户名"></p>required 非空判断 <p>名字:<input type"…...
vue3+dhtmlx-gantt实现甘特图展示
最终效果 数据源demo {"data": [{"actual_end_date": "2025-04-23","actual_start_date": "2025-04-15","duration": 10,"end_date": "2025-05-01","id": "2|jvUiek",&…...
Jupyter-AI Pandas-AI本地使用功能优化
引言 Jupyter-ai 和 Pandas-ai 的优化主要是个人工作遇到的需求,个人觉得是一个不错的体验优化,所以进行分享仅供参考,不喜勿喷,共同进步!Jupyter-AI优化主要包含以下方向(当前已实现): Jupyter-AI中 Chat 扩展和 NoteBook 的 Cell 工作去部分,使用的Language Model 和 …...
Model.eval() 与 torch.no_grad() PyTorch 中的区别与应用
Model.eval() 与 torch.no_grad(): PyTorch 中的区别与应用 在 PyTorch 深度学习框架中,model.eval() 和 torch.no_grad() 是两个在模型推理(inference)阶段经常用到的函数,它们各自有着独特的功能和应用场景。本文将详细解析这两…...
mac M2下的centos8:java和jenkins版本匹配,插件安装问题
java和jenkins版本匹配如下: Java Support Policy 如果版本不匹配,jenkins无法正常启动,插件也无法安装成功。 实际操作过程发现:表格也并不全然正确,还是需要特定的版本才能正常 参考如下: jenkins安装…...
PyTorch 中的 Autograd 实现细节解析和应用
摘要: 本文深入探讨 PyTorch 框架的核心组件之一——Autograd 机制。我们将解析其内部工作原理,包括计算图的构建、梯度的计算与传播,并探讨其在神经网络训练、模型调试及可解释性等方面的广泛应用。 通过理解 Autograd 的实现细节,开发者可以更高效地利用 PyTorch 进行深度…...
【AI提示词】波特五力模型专家
提示说明 具备深入对企业竞争环境分析能力的专业人士。 提示词 # Role:波特五力模型专家## Profile - language:中文 - description:具备深入对企业竞争环境分析能力的专业人士 - background:熟悉经济学基础理论,擅长用五力模型分析行业竞争 - personality…...
python 的 uv、pip 和 conda 对比和技术选型
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...