自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 收藏
  • 关注

原创 Python/Sphinx RST 文档从入门到实战:以 RSL-RL 库为例

是一种主要用于 Python 编程语言技术文档的标记语言,它是Sphinx(Python 官方文档生成器)的默认源文件格式。简单来说,它就像是一个“带有超能力的 Markdown”。它支持文档标题、列表、代码块。它支持强大的交叉引用(点击 A 跳转到 B)。它支持自动化提取(自动读取 Python 文件里的注释和类,生成 API 说明,这是 Markdown 做不到的)。.rst文件就像是一份排版严谨的“说明书源文件”,而就是打印机。

2026-10-19 21:29:45 55

原创 requirement.txt的环境与conda yml环境

确实更方便,但它不是“替代”,而是“升级版”——它把“创建环境”和“安装依赖”合并成一步,还能管理 Python 版本和非 Python 依赖。但前提是项目提供了。如果只有,你还是得先用 conda 建环境,再用 pip 装依赖。

2026-10-08 16:04:29 156

原创 venv环境与conda环境

每个 conda 环境都是一个独立的目录,里面包含了该环境所需的所有东西(Python 解释器、二进制库等)。它主要隔离了项目所需的 Python 包,但你的项目运行时,底层调用的仍然是系统的 C 库、系统 Python 本身等。不管理 Python 版本,你系统里是 3.13,创建出的环境就是 3.13,想换 3.12 只能重装系统或用其他工具。它还能处理非 Python 的依赖(比如特定版本的 CUDA 工具包),这是。这类包含 C 扩展的包,如果 PyPI 上没有提供对应你系统环境的预编译版本,

2026-10-08 15:48:46 157

原创 mjlab + rsl_rl + TensorBoard通过训练使用本地log查看日志流程

1. 进入训练日志目录# 2. 查看实验ls# 3. 确认 TensorBoard 日志# 4. 启动 TensorBoard# 5. 浏览器打开mjlab训练↓rsl_rl记录训练指标↓生成 events.out.tfevents 文件↓TensorBoard读取 Event 文件↓本地启动 TensorBoard Host↓↓浏览器查看训练曲线是训练数据,TensorBoard 是读取这些数据并进行可视化的工具,

2026-10-07 17:41:36 172

原创 对适配器的实验

Python 实现 Adapter 模式和 C++思路完全一样Target= 抽象基类(ABCAdaptee= 已存在的类(TextViewAdapter= 继承 Target + 继承/持有 Adaptee。关键差异C++ 用引用传参,Python 用可变对象或返回值。C++ 用指针成员,Python 直接存对象引用。C++ 多重继承常见,Python更推荐组合(对象适配器)。Python 甚至可以用鸭子类型或Protocol,不强制继承抽象类。设计思想一致,语言习惯不同。

2026-09-23 14:05:45 131

原创 设计模式之组合模式

问题答案Composite 是什么将对象组合成树形结构,表示部分-整体层次核心目的让客户端统一处理单个对象和组合对象四个角色关键机制递归组合 + 统一接口主要优点简化客户代码、易于扩展、结构一般化主要缺点难以限制组合中的组件典型应用图形编辑器、文件系统、GUI 组件树、语法树Composite 模式 = 树形结构 + 统一接口。它把"单个对象"和"组合对象"统一到同一个抽象接口下,客户端用同一套操作处理两者。Leaf:直接处理请求。Composite。

2026-09-21 21:55:34 207

原创 c++设计模式之适配器模式

适配器 =Target 的接口 + Adaptee 的能力。它继承 Target 让自己"是Target",获取 Adaptee 让自己"有Adaptee 的能力";在重写的 Target 方法里,调用 Adaptee 的方法,把请求转发过去,完成接口对接。不是"返回 adaptee",而是"调用 adaptee"。

2026-09-21 19:13:53 245

原创 public,private,protect继承访问

路径继承方式访问级别private较严格public较宽松编译器选择选择允许大多数访问的路径(即 RightPath)层次说明类内访问privateprotectedpublic控制成员在类内的可访问性继承访问继承方式(publicprotectedprivate)改变基类成员在派生类中的访问级别外部访问最终决定成员能否被外部代码访问。

2026-09-21 15:09:37 148

原创 std::make_unique智能指针

构造T类型的对象并将其包装进。问题答案是什么构造T对象并包装进unique_ptr的函数模板在哪个头文件<memory>从哪个标准开始C++14有几个重载6 个(3 个+ 3 个核心等价写法为什么用异常安全、代码简洁、官方推荐工厂里怎么用return std::make_unique<具体产品>();和区别没有具分配器版本和区别前者值初始化,后者默认初始化。

2026-09-21 15:00:15 125

原创 std::unique_ptr智能指针

是一种智能指针,它通过指针持有并管理另一对象(对其负责),并在unique_ptr离开作用域时释放该对象。问题答案unique_ptr是什么独占所有权的智能指针,离开作用域自动释放对象为什么工厂用unique_ptr工厂返回的对象所有权天然独占,转移给调用者为什么用官方推荐,异常安全,代码简洁什么时候用从函数返回动态对象、传递独占所有权、容器元素怎么用return std::make_unique<具体产品>();抽象工厂中的关键派生类指针隐式转基类指针 + 基类虚析构。

2026-09-21 14:19:21 240

原创 设计模式之结构型总览

结构型模式涉及如何组合类和对象以获得更大的结构。它关注的是**“如何把类/对象拼装成更大的结构”**,而不是"如何创建"(创建型)或"如何交互"(行为型)。结构型模式关注如何组合类和对象,获得更大的结构。

2026-09-20 15:10:17 112

原创 override说明符

要点说明引入版本C++11作用确保函数覆盖基类虚函数位置成员函数声明符之后报错若不是覆盖,编译时错误关键字性质上下文相关,非保留关键字可用于普通虚函数、虚析构函数组合可与final一起用。

2026-09-20 15:07:17 50

原创 设计模式之原型

对客户隐藏具体产品类。减少客户知道的名字数目。客户无须改变即可使用特定应用类。用原型实例指定创建对象的种类,通过拷贝原型创建新对象。

2026-09-20 13:45:31 155

原创 设计模式之工厂方法

public:// 工厂方法定义一个创建对象的接口,让子类决定实例化哪个类。实例化延迟到子类。

2026-09-20 13:43:43 83

原创 设计模式之抽象工厂

给创建操作加一个参数// 参数化:一个 Make 操作 + 种类参数语言适用性Smalltalk 等动态语言✅ 容易C++ 等静态语言⚠️ 需所有产品有共同基类,或安全向下转换问题:所有产品返回相同的抽象接口,客户无法区分具体子类。要特定操作就得,可能失败。这是灵活性 vs 安全性的经典权衡。提供一个接口创建一系列相关对象,无须指定具体类。

2026-09-20 13:35:30 356

原创 设计模式之创建型设计模型1

思路:把创建构件族的对象作为参数传给CreateMaze。public:// ... SetSide 用 factory.MakeWall()魔法工厂public:用法// 一个参数换整套产品特点:一次替换整个产品族(房间、墙、门)。模式核心做法传什么换产品的粒度虚函数创建无(靠继承)单个产品工厂对象创建工厂对象整个产品族Builder分步构建建造者对象构建过程 + 表示Prototype克隆原型原型对象通过替换原型Singleton唯一实例。

2026-09-20 13:15:03 328

原创 设计模式之状态模式

Light是Context,持有当前Statepress()委托给它;OnStateOffState是具体状态,各自实现press()行为,并调用setState()互相切换。行为随状态改变,切换显式化——这就是状态模式。需要我换一个更贴近你 FSM 代码的例子(带生命周期)再写一版吗?

2026-09-19 19:30:28 205

原创 std::shared_ptr 完全指南:从原理到实战(C++11 智能指针详解)

要点说明本质共享所有权的智能指针,引用计数管理生命周期创建优先(一次分配,异常安全)销毁强计数归零析构对象,弱计数归零释放控制块线程不同对象安全,同一对象需同步陷阱循环引用、裸指针重复包装、同对象并发别名可共享 A 的所有权却指向 B 的成员搭档weak_ptr打破循环,unique_ptr用于独占一句话记住shared_ptr用引用计数实现共享所有权,最后一个持有者负责销毁对象;优先用创建,警惕循环引用,多线程注意同一对象需同步。

2026-09-19 18:22:10 252

原创 C++ `inline` 说明符完全解读

inline本意是给优化器的指示器:优先采用函数内联替换,而非函数调用。好处:避免函数调用开销(传参、返回)。代价:可执行文件变大(函数体被复制多次)。│ inline 的现代语义 = 允许多次定义(ODR 豁免) ││ ✅ 头文件中定义函数/变量 → 必须加 inline ││ ✅ 类内定义的成员函数 → 隐式 inline(无需写) ││ ✅ constexpr/consteval 函数 → 隐式 inline ││ ✅ 弃置函数 → 隐式 inline │。

2026-09-19 17:17:37 209

原创 break ,continue

break整个循环不干了。continue这轮不干了,下一轮接着干。

2026-09-17 13:03:45 83

原创 python之range()

你发的这段代码,本质上可以看作是range类的“函数签名说明书”或“接口契约”。定义了range的公开接口:它有哪些属性(startstopstep),支持哪些操作(构造函数、lenin、索引、切片、迭代、反转)。规定了参数和返回值的类型:每个方法接受什么类型、返回什么类型。这对于静态类型检查(如mypy)和 IDE 的代码补全、错误提示至关重要。对同一个函数在不同场景下的行为做了精确描述:例如构造函数有两种传参方式,对整数和切片返回不同类型。强调了特定参数必须用位置传递。

2026-09-09 22:26:34 116

原创 *arg ,**kwarg

你的函数定义它把所有“没报名字”的参数(位置参数)都装进一个叫arg的包裹(元组)里。把所有“报了名字”的参数(关键字参数)都装进一个叫kwarg的包裹(字典)里。所以,你看到的输出完全是正常且符合预期的,是 Python 参数收集机制的标准行为。

2026-09-09 22:07:22 90

原创 小题大计之cfg:class

这段存根揭示了@property它只是property类的一个实例,这个实例把"读/写/删"三个函数装进 fget/fset/fdel 三个槽,然后靠描述器协议(__get__等)在点号访问时自动转发到对应槽里的函数。装饰器语法@property和只是给这个打包流程提供的语法糖。官方文档对照:https://docs.python.org/3/library/functions.html#property (文档里的对应这里的__init__,文档里讲的对应这里的三个方法)。

2026-09-09 19:34:49 171

原创 python装饰器

官网链接

2026-09-09 17:46:45 125

原创 c++的return返回

2026-09-09 13:34:36 105

原创 C++ const 型数据完全指南

场景写法目的常量值定义不可修改的常量函数参数(值传递)保护参数不被修改函数参数(指针)保护指针指向的数据函数参数(引用)避免拷贝 + 保护数据成员函数承诺不修改对象状态返回值返回只读引用指针指向常量指向的数据不可修改常量指针指针本身不可修改指向常量的常量指针指针和指向的数据都不可修改const 让数据在需要只读时更安全,在需要保证不变时更清晰,是 C++ 中实现"契约式编程"的重要工具。🎯。

2026-09-08 19:41:45 358

原创 C++ 虚函数完全指南

知识点要点定义用virtual声明的成员函数作用实现运行时多态使用方法基类声明 → 派生类重写 → 基类指针/引用调用底层实现纯虚函数抽象类包含纯虚函数的类虚析构函数基类必须声明,防止内存泄漏性能少量开销,可接受虚函数让基类指针能够调用子类重写的函数,实现了"一个接口,多种实现"的运行时多态性。🎯。

2026-09-08 19:39:22 282

原创 Python 中 self 用法详解

定义self是对类实例对象本身的引用。通过self,你可以访问属于该类的变量和方法。作用范围:仅在类的方法内部使用(包括普通方法和构造函数)。self.name = name # 实例变量# 创建类的实例my_object.greet() # 输出: Hello, my name is Alice代码解析__init__方法是一个特殊的方法,称为构造器或初始化方法。当创建类的新实例时,这个方法会被自动调用。self.name是实例变量,每个MyClass对象都会有自己的name属性。

2026-09-07 20:21:57 287

原创 c++非常量引用的初始值必须为左值

类型定义示例左值 (lvalue)有内存地址、可取地址的表达式变量名a、数组元素nums[i]右值 (rvalue)临时值、无内存地址的表达式字面量5、表达式a + b要点说明问题根源非常量引用不能绑定到右值核心知识左值有地址,右值临时无地址最佳实践优先使用值传递或std::max避坑指南函数参数如果不修改,优先用const &学习建议理解左值/右值概念,掌握引用规则。

2026-09-07 14:22:09 132

原创 Python try/except 完全使用指南

"""账户余额不足异常"""super().__init__(f"余额不足!当前余额:class InsufficientFundsError(Exception) : """账户余额不足异常""" def __init__(self , balance , amount) : self . balance = balanceself . amount = amount super() . __init__(f"余额不足!当前余额: {balance } , 需要: {

2026-09-04 14:59:57 165

原创 C++ namespace(命名空间)完整原理详解

函数/类可以在命名空间内声明,在命名空间外部使用限定名实现,必须放在外层包含命名空间的命名空间域(全局或父namespace)。void f();// 在Q域内定义 Q::V::f// 在Q域内定义 Q::V::C::m// ✅全局域定义,合法void Q::V::f(){} // ❌错误:R不是Q的外层命名空间,不能在这里定义Q的成员规则:外部定义必须满足三点该声明已经在命名空间内部出现定义位置处于父命名空间/全局命名空间域必须使用限定名语法。

2026-09-04 00:30:35 273

原创 C++ vector 与 unordered_map 底层模板原理汇总

✅ size:实际元素数量;capacity:已经申请的堆内存大小。// 桶数组,存储Node*size_t m_size;桶数组bucket_array[0…// 移动旧元素到新内存。// 析构释放旧内存。

2026-09-04 00:18:58 134

原创 Python `super()`

二、功能描述返回一个代理对象(proxy object),它将方法调用委托给 的父类或兄弟类。这对于访问在子类中**被重写(overridden)**的继承方法非常有用。参数 决定了要搜索的 方法解析顺序(MRO)。搜索从 之后紧邻的那个类开始。举例说明:如果 的 为:且 的值为 ,那么 将搜索:与 对应的类的 属性,列出了 和 共同使用的方法解析搜索顺序。该属性是动态的,每当继承层次结构发生更新时都可能改变。当在一个类的普通方法(ordinary method)中直接调用时,两

2026-08-22 20:39:00 133

原创 一阶系统与二阶系统

微分方程是未知量与其导数之间的关系式形如y’+P(x)y=Q(x)的微分方程称为一阶线性微分方程,Q(x)称为自由项。一阶,指的是方程中关于Y的导数是一阶导数。线性,指的是方程简化后的每一项关于y、y’的指数为1。

2026-08-18 22:45:26 228

原创 python装饰器

装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。这个函数应该接受一个函数作为参数,并返回的函数。

2026-08-18 18:46:13 213

原创 c++指针说明符*及引用说明符&

指针就是存储地址的变量,它的核心价值在于让你能"间接"地访问内存——无论是为了在函数间共享数据、动态分配内存,还是为了实现回调、多态等高级编程范式,都离不开它。引用类型核心作用典型场景左值引用操作现有对象按引用传参、避免拷贝、函数返回引用const 左值引用const &只读访问,可绑定右值函数参数(接受左值或右值)右值引用&&接管临时对象移动构造、完美转发、移动赋值。

2026-08-07 14:05:22 352

原创 Windows下的系统环境变量和用户环境变量

根据微软官方文档,系统环境变量由计算机维护,适用于该计算机上的所有用户,通常包括操作系统路径等全局设置。用户环境变量则由每个用户各自的账户维护,只影响当前用户的环境,可以覆盖同名的系统变量。用户环境变量定义特定用户环境的行为,通常包含用户配置文件路径等个性化设置。

2026-08-06 10:54:06 127

原创 C/C++: Edit Configurations (JSON) 和 Preferences: Open User Settings (JSON)

和。二者虽然都是编辑JSON配置文件,但作用范围、生效领域、存储位置完全不一样。简单概括:一个是,另一个是。

2026-08-05 22:52:42 373

原创 gcc、g++、gdb

特点:当你的程序崩溃(比如段错误 Segmentation Fault),或者逻辑不对时,你可以用 gdb 让程序停下来,一行一行地看变量的值,找出 Bug 在哪。第三步(找Bug):gdb 接管了 main.exe,你在 VS Code 里打断点,gdb 就会在断点处把程序暂停,把内存里的数据展示给你看。简单来说,它们的关系是:gcc 和 g++ 负责把代码“翻译”成机器能懂的程序(编译),而 gdb 负责帮你检查这个程序有没有写错(调试)。身份:C 语言编译器(也是整个编译器套件的总称)。

2026-08-05 15:27:41 167

原创 【VS Code】调试与开发利器:`.vscode` 文件夹下的 4 大核心 JSON 配置全解析

是调试的入口。需要编译/构建/前置准备时,一定要配 tasks.json。需要项目隔离、环境变量固定时,配置 settings.json。需要团队统一调试工具时,把插件写入 extensions.json并提交到 Git 仓库。

2026-07-26 17:19:22 82

【C++泛型编程】基于STL迭代器的容器算法解耦设计:统一数据访问与处理的抽象框架构建

内容概要:本文系统讲解了STL迭代器的核心思想与设计哲学,从find()函数引入迭代器作为“位置”而非数据本身的抽象概念,阐述其作为容器与算法之间桥梁的作用。文章深入剖析了迭代器的三种视角(智能指针、位置标记、游标)、六大组件关系、迭代器类别(输入、双向、随机访问)及其对算法选择的影响,并详细说明了迭代器生命周期、失效机制及现代C++中的演进,如C++20的Ranges和视图适配器。最后上升到泛型编程、函数式风格与设计模式层面,揭示迭代器在解耦容器与算法、实现通用性和抽象化中的关键地位。; 适合人群:具备一定C++基础,熟悉STL基本使用的中高级开发者,尤其是希望深入理解STL底层机制和现代C++编程范式的研发人员; 使用场景及目标:①理解STL中迭代器如何实现容器与算法的解耦;②掌握不同迭代器类型的特性及其对算法效率的影响;③学习如何利用迭代器思维编写通用、可复用的泛型代码;④为掌握C++20 Ranges、视图和惰性求值等现代特性打下坚实基础; 阅读建议:此资源强调从具体操作(如find、遍历)到抽象思维(泛型、范围、适配器)的跃迁,建议结合代码实例逐步实践,重点关注迭代器失效规则、标签分派机制以及范围组合的函数式表达,从而真正建立起“迭代器即数据导航”的系统性认知。

2026-01-07

算法设计基于数组哈希表的字符频率统计:实现高效的字母异位词判定系统

内容概要:本文深入解析LeetCode第242题“有效的字母异位词”,重点讲解如何利用数组作为简易哈希表来高效判断两个字符串是否互为字母异位词。文章详细剖析了基于字符频率统计的算法实现,通过创建长度为26的整型数组,利用字符与'a'的ASCII码差值作为索引,分别对字符串s和t进行“加一”和“减一”操作,最后检查数组是否全为零来得出结论。该方法时间复杂度为O(n),空间复杂度为O(1),优于排序法。; 适合人群:具备基本编程能力、熟悉字符串和数组操作的初级算法学习者,以及准备技术面试的程序员;; 使用场景及目标:①掌握哈希思想在实际问题中的简化应用;②理解字符频率统计的经典解法;③提升对时间与空间复杂度分析的能力; 阅读建议:建议结合代码逐步调试,手动模拟record数组的变化过程,加深对索引映射和频次抵消机制的理解,并尝试扩展到大写字母或Unicode字符场景以巩固知识点。

2026-01-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除