- 博客(24)
- 收藏
- 关注
原创 快速排序的学习理解:从基础分治到三路划分优化
每一轮先选择一个基准元素 pivot,然后通过划分操作,把小于 pivot 的元素放到左侧,把大于 pivot 的元素放到右侧,pivot 最终落位。如果输入本身已经有序,并且每次固定选择最左端元素作为 pivot,那么划分会出现非常不均衡的情况:pivot 已经把整个序列扫描了一遍,结果却只切出一个元素,剩下的元素仍然留在同一侧。针对有序输入退化,一个简单有效的优化是随机选择 pivot:在 low 到 high 范围内随机取一个下标,再把这个位置上的元素换到最左端,继续使用原来的划分逻辑。
2026-10-20 13:37:20
174
原创 四元数的学习理解
因为在 3D 空间里,不管你先绕 X 转、再绕 Y 转、再绕 Z 转、再绕奇怪的轴转。最终姿态,总能找到:某一根轴 Axis + 某一个角度 θ,一次旋转直接转过去。这就是所谓的 Axis-Angle。
2026-10-15 22:46:26
65
原创 VisualBoyAdvance 1.8 空格加速太快怎么办?固定 400% 倍速方案(兼容 PokemonMemHack)
这个问题最终的核心不是“VBA 不能加速”,而是:VisualBoyAdvance 1.8 的 Space Speedup 默认属于近似无限速模式,并没有提供独立的固定倍率设置。正常:不调节按住 Space:固定 400%松开:不调节既保留了老版 VBA,也不会影响原来的 PokemonMemHack 使用。如果你遇到的也是:VBA 一按 Space 就 8000%~10000%,而且又因为 PokemonMemHack 不能换 VBA-M,这个方法应该会比较适合。
2026-08-26 01:36:55
626
原创 UE4 垃圾回收(GC)机制详解:从可达性分析到 Mark/Sweep
整篇文章压缩成一句话:UE 的 GC 会定期从“肯定活着的对象”出发,沿着 UObject 的引用关系往下找;文章中的测试也展示了:通过 SpawnActor 创建的 Actor,即使本地指针置空并强制 GC,Actor 仍可能保持可达。UE 先找一批:“这些员工确定还在公司。你虽然从 C++ 的角度保存了一个指针,但是:UE 的 GC 不一定知道这是一条需要追踪的 UObject 引用。所以第一个非常重要的结论:UObject 一般不是通过 delete 来管理生命周期,而是交给 UE 的 GC。
2026-08-23 15:15:37
268
原创 C++ STL 知识点整理
hash(key1)hash(key2)最终落到同一个 bucket。就叫:哈希冲突。链地址法开放寻址标准库具体实现不要求固定方案,不过常见 unordered_* 实现使用 bucket 结构。
2026-08-17 10:51:12
160
原创 C++ 四种显式类型转换深度解析:从 static_cast 到 dynamic_cast 与 RTTI
本文深入解析 C++ 中四种显式类型转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)的核心原理、使用场景与区别。重点探讨 dynamic_cast 与 RTTI(运行时类型信息)的关系,厘清 dynamic_cast 与虚函数在多态设计中的不同角色,并提供大量代码示例和面试常见问题解答。
2026-08-16 23:40:10
379
原创 C++ 右值引用、移动语义与完美转发:原理剖析
std::move 本质上是一个类型转换,把表达式转换为右值类别(通常是 xvalue),从而使移动构造函数或移动赋值运算符有机会被调用。如果你的移动构造可能抛异常,标准库为了保证异常安全,有时会宁愿选择拷贝。它的作用是:如果原来传进来的是左值,就继续当左值;如果原来传进来的是右值,就继续当右值。在深入右值引用之前,必须先理解左值(lvalue)和右值(rvalue)的基本概念。有名字,所以永远是左值表达式,右值信息就丢了。的原值了,你可以把它当右值。,那两个都会变成“左值 左值”,因为有名字的。
2026-08-16 23:24:45
522
原创 C++智能指针完全指南:从原理到实战
智能指针的出现,正是为了解决这些痛点。简单来说,智能指针仍然是“指针”,但它会帮你自动管理。通常内部保存被管理对象的指针以及指向控制块的状态。,本质上是:一个普通的C++对象,内部保存一个指针,在自己的析构函数里自动释放资源。就不会执行,导致内存泄漏。于是,程序员很自然地想到:能不能让一个对象帮我保管这个指针,在它自己销毁的时候自动。,从为什么需要它们开始,逐步深入到原理、使用场景和面试高频考点。干脆禁止拷贝,这和前面学习的浅拷贝、重复释放问题直接关联。语句,这也是现代C++特别重要的编程思想。
2026-08-13 17:10:47
318
原创 深入理解 new 与 delete:从内存分配到对象生命周期
new T↓ 申请一块内存↓ 构造一个 T↓ 返回 T*delete p↓ 析构一个 T↓ 释放内存new T[n]↓ 申请连续内存↓ 构造 n 个 T↓ 返回第一个 T 的地址delete[] p↓ 析构 n 个 T↓ 释放整块内存永远保持new配deletenew[]配delete[],即使面对简单类型也不要混用。理解背后的内存模型和对象生命周期,才能写出更可靠的 C++ 代码。
2026-08-12 14:47:52
503
原创 C++ Lambda 表达式完全指南
写法含义[]不捕获任何外部变量[=]值捕获所有变量[&]引用捕获所有变量[x]值捕获 x[&x]引用捕获 x[=, &x]默认值捕获,x 引用捕获[&, x]默认引用捕获,x 值捕获。
2026-08-12 14:40:12
504
原创 UE里为什么要有提升变量
当一个类里面的函数比较多,并且使用比较频繁的时候,就要不断的从这个类节点往外拉线,从而获取不同的函数节点,这样的蓝图就会看起来比较乱,这时候,就可以将这个常用的类提升为变量。
2025-09-08 20:31:04
356
原创 《C++ primer plus》学习记录之函数指针
与数据项相似,函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。通常,这些地址对用户而言,既不重要,也没有什么用处,但对程序而言,却很有用。可以编写将另一个函数的地址作为参数的函数。这样第一个函数将能够找到第二个函数,并运行它。与直接调用另一个函数相比,这种方法很笨拙,但它允许在不同的时间传递不同函数的地址,这意味着可以在。
2025-04-12 18:16:04
1004
原创 UE5DirectionLight中shaft功能(光束泛光)
下面有一个光束泛光的选项,勾选上,(还可以调节强度大小),你的太阳光线在穿过树木时就会有丁达尔效应了,如图。在大纲中选中DirectionLight.(就是你世界里天空中的太阳)在搜索栏中搜索shaft。记住现在这棵树的样子。
2025-04-07 22:53:14
450
原创 UE5中postProcessVolume的bloom用法
搜索框继续搜bloom.勾选上强度后就可以在强度右边的数值框进行调节。调节到0时太阳一点都没有光晕,稍微调大点就会有明显的光晕。拖动后期处理体积到世界中,然后勾选上红框内容。bloom用来调节太阳的光晕程度。
2025-04-07 22:43:59
702
原创 以太网的基本知识
这个结构看上去和(b)很像,但其实里 面有一个重要的变化,即信号会发送给所有设备这一性质变了,现在信号只 会流到根据MAC地址指定的设备,而不会到达其他设备了。也就是说,将包发送到MAC头部的接收 方MAC地址所代表的目的地,用发送方MAC地址识别发送方,在这些 方面无线局域网和以太网是一样的。因此,当一台计算机发送信号时, 信号就会通过网线流过整个网络,最终到达所有的设备。这样一来就能够判断信号的接收者了,与接收者地址匹配的 设备就接收这个包,其他的设备则丢弃这个包,这样我们的包就送到指定的目的地了。
2025-03-19 12:19:34
577
原创 经济学原理微观经济学分册学习(1)
当政府通过增发货币弥补支出时,实际被“征税”的是**持有货币的全体民众 ,尤其是 现金储蓄者、固定收入群体 以及 无法快速调整收入与价格的人。例如,若通胀率为10%,而存款利率为2%,储蓄者的购买力净损失8%。- 对技能不足或有特殊障碍(如残疾)的人群,时间限制可能导致其陷入贫困,但政策主要目标群体为“有工作能力者”。对于有工作能力但犹豫不决的人群,政策通过减少“等待选项”的价值,提高其主动求职的边际收益。如果工作后领取的津贴因收入增加而减少,部分人可能反而增加储蓄以弥补退休后潜在的收入缺口。
2025-03-18 22:43:39
790
原创 设计模式:工厂三兄弟之简单工厂模式
对学习做个记录引用一下别人的文章,首先谈谈工厂的作用,工厂模式(包括简单工厂模式、工厂方法模式和抽象工厂模式)到底有什么用,很多时候通过反射机制就可以很灵活地创建对象,为毛还要工厂?,在本文中我将围绕和来简单谈谈工厂的作用。对象本身的职责比较容易理解,就是对象自身所具有的一些数据和行为,可通过一些公开的方法来实现它的职责。在Java语言中,我们通常有以下几种创建对象的方式:(1) 使用new关键字直接创建对象;(2) 通过反射机制创建对象;(3) 通过clone()方法创建对象;
2025-03-18 21:58:14
1297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅