自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Unreal Engine 5:第三人称运动系统和人物动画

本文详解第三人称视角下角色运动系统与任务动画的实现。通过设置弹簧臂与摄像机组件,调整视角并启用控制器旋转控制,使摄像机随玩家操作平滑移动。修改角色移动方向为基于摄像机朝向,并开启“将旋转朝向运动”确保角色转向自然。随后创建动画蓝图与混合空间,导入奔跑与待机动画,通过速度变量驱动动画切换,优化过渡平滑度,最终实现流畅的第三人称角色运动与动画表现。

2026-11-02 23:28:43 233

原创 C++:list

列表可以在任意位置进行插入和删除的操作,且支持双向迭代器双向列表可以将每个不同位置的元素存储在不同的地址空间,顺序由每个元素地址的前后进行排序。

2026-10-24 00:33:40 216

原创 Unreal Engine 5:开关门实现和流程控制

本文详细介绍了在虚幻引擎中实现旋转门功能的完整流程:通过Fab搜索并添加wooden_door素材,创建BP_Door蓝图,配置静态网格体与碰撞体,利用时间轴(Timeline)控制门的开启与关闭动画,并通过事件重叠与反向播放实现自动复位。同时,文章还系统讲解了蓝图中的常用流程控制节点,如分支(Branch)、FlipFlop、DoOnce、序列(Sequence)、延迟(Delay)、ForLoop及状态门(Gate),并通过调试键演示其逻辑行为,帮助开发者掌握核心编程思路。

2026-10-21 13:06:31 106

原创 C++:vector

vector介绍及使用摘要 vector是C++ STL中重要的动态数组容器,提供高效的随机访问和动态扩容功能。文章从使用、原理到模拟实现三个层次展开: 核心接口 构造函数:无参构造、数量初始化、拷贝构造、迭代器构造 迭代器:begin/end、rbegin/rend 容量管理:size、capacity、resize(改变元素数)、reserve(预分配空间) 元素操作:push_back、pop_back、insert、erase、operator[] 关键特性 扩容机制:VS按1.5倍增长,g++按2

2026-08-19 18:16:46 239

原创 C++:String

本文摘要:C++中的string类相比C语言字符串操作更安全高效,符合面向对象思想。文章详细介绍了string类的常用接口,包括构造函数、容量操作、访问遍历、修改操作等,并提供了模拟实现的关键代码。重点讲解了string类的迭代器使用、范围for循环、auto关键字应用,以及拷贝构造、赋值重载的传统与现代写法对比。通过具体代码示例演示了string类的基本操作和底层实现原理,帮助开发者更好地理解和使用string类替代C风格字符串,提升字符串处理的安全性和便捷性。

2026-06-01 01:08:53 196

原创 Unreal Eangie 5:蓝图编辑

本文摘要:本文详细介绍了在虚幻引擎中实现玩家移动和视角控制功能的完整流程。主要包括:1)关闭默认移动模板,创建自定义GameMode和角色蓝图;2)使用增强输入系统配置WSAD移动按键,设置向量2D输入操作;3)在角色蓝图中实现移动逻辑,包括获取控制器、添加输入映射、处理移动向量;4)实现视角控制功能,处理Y轴反转问题。教程提供了从项目设置到蓝图编程的完整实现步骤,并包含实用技巧如批量注释快捷键(Ctrl+C)。

2026-04-12 15:58:04 411

原创 Unreal Engine 5:前置知识和入门基础

本文详细介绍了UE5的下载安装及基础操作指南。首先说明通过Epic Games官网下载安装虚幻引擎的步骤,包括引擎版本选择。接着讲解创建第一个项目的流程,包括模板选择、项目命名和存储位置设置。文章还全面介绍了UE5的基础界面功能,包括菜单栏、工具栏、模式选择等操作面板的用途。最后演示了基础的蓝图编程示例,展示如何创建Actor、设置变量并实现简单的"Hello World"打印功能。全文为初学者提供了从软件安装到基础操作的完整入门指引。

2026-03-22 01:48:13 559

原创 C++:模板初阶

摘要:本文介绍了C++中泛型编程的实现方式,重点讲解了函数模板和类模板的使用。通过函数模板可以创建通用交换函数,避免为每种类型单独重载。模板在编译时根据实参类型自动生成特定版本代码,提高了代码复用率。文章详细说明了模板的隐式和显式实例化方法,以及模板参数匹配原则。对于类模板,强调其实例化需要在类名后指定具体类型。模板编程是代码复用的重要手段,能有效提升开发效率和可维护性。

2026-03-10 18:30:53 345

原创 C++:内存管理

本文分析了C/C++中的内存分布和管理机制。在C语言中,内存分为栈、堆、数据段和代码段,变量根据类型存储在不同区域。动态内存管理通过malloc/calloc/realloc/free实现,其中calloc会初始化内存,realloc用于扩容。C++在此基础上引入了new/delete操作符,其优势在于会自动调用构造/析构函数,且内置异常处理机制。文章详细对比了malloc/free与new/delete的六大区别,并深入解析了operator new/delete的底层实现原理,以及定位new表达式等高级

2026-03-09 20:33:24 365

原创 C++:类和对象 Part4

之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方 式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔的数据成 员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式这里还有一种写法每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义 初始化的地方每个成员变量初始化只能出现一次如果出现多次就好报错。

2026-02-28 17:08:14 513

原创 C++:类与对象part3

当运算符被用于类类型的对象时,C++语言允许我们通过运算符重载的形式指定新的含义。C++规定类类型对象使用运算符时,必须转换成调用对应运算符重载,若没有对应的运算符重载,则会编译报错在C++中可以透过运算符重载对函数进行比较,但是需要调用对应的运算符重载,则会报错运算符重载是具有特殊名字的函数,他的名字是由operator和后面要定义的运算符共同构成。和其他函数一样,它也具有其返回类型和参数列表以及函数体重载运算符函数的参数个数和该运算符作用的运算对象数量一样多。一元运算符(取反 “!

2026-02-25 13:25:42 653

原创 C++:类和对象part2

本文介绍了C++中的默认成员函数,主要包括构造函数、析构函数和拷贝构造函数。构造函数在对象实例化时自动调用,用于初始化对象;析构函数在对象销毁时自动调用,用于资源清理;拷贝构造函数用于对象间的拷贝操作。编译器会自动生成这些函数的默认版本,但对于需要资源管理的类(如包含指针成员),需要自定义实现以避免浅拷贝等问题。文章通过代码示例展示了这些函数的特性和使用场景,并强调了自定义实现的重要性。

2026-02-19 21:45:57 674

原创 C++:类和对象 part1

class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或 者成员函数为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或者后面加_ 或者 m 开头,注意C++中这个并不是强制的,只是一些惯例,具体看公司的要求。

2026-02-15 22:22:19 598

原创 C++:入门基础(下)

C++函数重载允许同名函数通过参数类型、数量或顺序不同实现多态,但不能以返回值为重载条件。引用是变量的别名,必须初始化且不能更改引用对象,常用于传参和返回值以减少拷贝。const引用可引用常量或不同类型数据。指针与引用各有特点:引用更安全但功能受限,指针更灵活但易出错。内联函数(inline)建议编译器展开代码以提高效率,替代C的宏函数。C++11引入nullptr解决NULL在指针调用中的歧义问题,避免类型转换错误。这些特性共同增强了C++的类型安全性和编程灵活性。

2026-02-13 12:00:00 1662

原创 C++:入门基础(上)

C++发展历程与核心特性摘要: C++由Bjarne Stroustrup于1979年在贝尔实验室开发,1983年正式命名,在C语言基础上引入面向对象特性。1998年完成ANSI/ISO标准化,期间整合了STL模板库。核心特性包括: 命名空间(namespace):解决命名冲突问题,支持嵌套定义和多文件扩展 输入输出流:通过cout/cin实现类型自适应的IO操作 缺省参数:支持全缺省和右连续的半缺省参数设置 兼容性:保留C语言语法,同时扩展面向对象和泛型编程能力 典型示例展示了命名空间的实际应用、流式IO

2026-02-06 01:14:05 645

原创 (完结)C语言数据结构:排序

本文系统介绍了常见排序算法及其实现。主要内容包括:插入排序(直接插入和希尔排序)、选择排序、堆排序、交换排序(冒泡和快速排序)、归并排序等比较排序,以及非比较的计数排序。文章详细阐述了各算法的核心思想、代码实现、时间/空间复杂度分析,并通过性能测试对比了不同排序算法的效率。最后总结了排序算法的稳定性,指出直接插入、冒泡和归并排序是稳定的,而希尔、选择、堆和快速排序是不稳定的。时间复杂度从O(n^2)到O(nlogn)不等,其中快速排序、归并排序和堆排序效率较高。空间复杂度方面,归并排序为O(n),其他多为O

2026-02-03 22:52:23 674

原创 二叉树(下)

本文总结了二叉树相关算法题及选择题。算法题包括:1)单值二叉树判断;2)相同树判断;3)对称树判断;4)子树判断;5-7)前序/中序/后序遍历实现;8)二叉树构建与遍历。选择题涉及二叉树性质应用,如:1)根据节点数计算叶子节点;2)完全二叉树叶子节点计算;3)完全二叉树高度计算;4)完全二叉树叶子节点计算;5-8)遍历序列相关问题。所有题目均给出了详细的分析过程和正确答案,涵盖了二叉树的基本性质和遍历算法。

2026-01-24 23:35:10 1040

原创 二叉树(上)

本文介绍了链式二叉树的实现及基本操作。首先阐述了用链表表示二叉树的方法,每个节点包含数据域和左右指针域。接着详细讲解了二叉树的创建过程,以及前序、中序和后序三种遍历方式的递归实现和原理图。此外,还介绍了计算二叉树节点个数、叶子节点个数、第k层节点个数、二叉树深度等常见操作的实现方法。最后讲解了二叉树的销毁、层序遍历以及判断是否为完全二叉树的算法。文中通过代码示例和原理图相结合的方式,清晰地展示了各种二叉树操作的具体实现过程。

2026-01-17 03:53:57 349

原创 二叉树:堆(下)

本文分析了堆算法的时间复杂度:向上调整算法时间复杂度为O(nlogn),通过满二叉树模型推导得出;向下调整算法时间复杂度为O(n),利用错位相减法证明。文章还介绍了堆排序的实现,对比了向上和向下调整建堆的差异。最后详细讲解了Top-K问题的解决方案:通过建立小顶堆(求前K大元素)或大顶堆(求前K小元素),依次比较剩余元素与堆顶元素,最终时间复杂度为O(k + (n-k)logk)。提供了完整的C语言实现代码,包括数据生成、堆调整和结果输出等关键步骤。

2026-01-07 01:43:36 809

原创 二叉树:堆(上)

本文系统介绍了树形数据结构及其应用。首先阐述了树的基本概念、递归定义和常见术语(如根节点、子节点、度等),重点讲解了二叉树的特性、存储结构(顺序/链式)和特殊类型(满/完全二叉树)。其次详细介绍了堆的实现,包括小根堆/大根堆的概念、插入删除操作和向上/向下调整算法。最后通过两种方法实现堆排序:方法一借助堆结构函数,方法二直接基于堆思想调整数组。文章配有代码示例和调试过程,完整展现了从基础理论到实际应用的转化过程,特别强调了堆在排序算法中的高效性。

2025-12-28 01:57:28 1064

原创 栈和队列(全)

本文介绍了栈和队列两种数据结构的基本概念与实现方法。栈是一种后进先出(LIFO)的线性表,可以使用数组或链表实现,数组实现更优。详细展示了栈的初始化、入栈、出栈、取栈顶元素、销毁等操作的代码实现与调试过程。队列是一种先进先出(FIFO)的线性表,链表实现更优,同样演示了队列的初始化、入队、出队、取队头队尾元素、销毁等操作的代码实现。最后通过有效的括号匹配算法展示了栈的实际应用。两种数据结构都提供了完整的代码实现和调试步骤说明。

2025-12-15 00:16:55 375

原创 顺序表与链表:双向链表

本文主要介绍了链表的分类与实现,重点分析了单链表和双向带头循环链表两种常用结构。双向链表相比单链表增加了前驱指针,支持双向遍历,结构更复杂但操作更高效。文章详细讲解了双向链表的代码实现,包括初始化、插入、删除、查找等核心操作,并通过调试示例展示了具体执行过程。最后对比了顺序表和链表在存储结构、访问效率、插入删除性能等方面的差异,指出顺序表适合频繁访问的场景,而链表更适用于高效插入删除操作。

2025-12-09 12:37:13 227

原创 顺序表和链表:单链表

本文系统介绍了链表数据结构及其基本操作实现。首先阐述了链表的概念和节点结构,指出链表通过指针实现逻辑连续但物理存储不连续的特性。随后详细讲解了单链表的各种操作:包括创建节点、打印链表、头插尾插、头删尾删、查找、指定位置插入/删除、销毁等,并针对每种操作提供了代码实现和调试分析。特别强调了指针传参时的注意事项,如尾插操作需使用二级指针修改头节点。最后通过多个算法题(如移除元素、反转链表、回文判断、环形链表检测等)展示了链表的应用,对每个问题给出解决思路、代码实现和运行结果。全文通过丰富的代码示例和调试过程,深

2025-12-04 01:04:22 599

原创 顺序表与链表:顺序表

摘要:本文系统介绍了线性表的基本概念与实现方法。重点阐述了顺序表的数据结构,包括静态顺序表和动态顺序表的区别,后者通过动态扩容解决了空间浪费问题。详细讲解了顺序表的核心操作:尾插、头插、尾删、头删的实现逻辑与代码示例,并通过调试案例验证了扩容机制。此外,还介绍了指定位置插入/删除、查找等扩展功能。最后指出了顺序表操作的时间复杂度问题和空间浪费问题,为后续讨论更高效的链表结构做铺垫。(149字)

2025-11-17 23:08:30 933

原创 C语言数据结构-复杂度

本文介绍了数据结构和算法的基础概念,重点讲解了时间复杂度和空间复杂度的计算方法。数据结构是计算机存储和组织数据的方式,算法则是解决问题的计算步骤。文章通过多个示例演示了如何计算程序的时间复杂度和空间复杂度,并介绍了大O渐进表示法的三条推导规则。其中,时间复杂度衡量算法运行快慢,空间复杂度衡量算法所需的额外空间。通过分析旋转数组问题的三种解法,展示了不同算法在时间/空间复杂度上的差异:原始解法O(N²)/O(1),新数组解法O(N)/O(N),最优解的三次逆置法O(N)/O(1)。文章强调在实际应用中应关注算

2025-11-10 20:11:21 827

原创 (完结)预处理详解

本文系统介绍了C语言预处理指令的使用方法。主要内容包括:1.预定义符号(如__FILE__、__LINE__等)及其应用;2.#define指令定义常量、宏以及注意事项;3.宏与函数的对比分析;4.#和##运算符的特殊用法;5.条件编译指令的使用场景;6.头文件包含方式及防止重复包含的解决方案。文章通过大量代码示例详细说明了预处理指令在程序开发中的实际应用,并指出了使用过程中可能遇到的问题及其解决方法,为C语言预处理指令的使用提供了全面指导。

2025-11-04 17:47:34 943

原创 编译和链接

摘要:C程序的执行涉及翻译环境和运行环境。翻译环境通过编译和链接将源代码转换为可执行文件,其中编译包含预处理、词法语法分析、汇编三个阶段。预处理处理宏和头文件,编译生成汇编代码,汇编转换为机器指令,链接合并目标文件并重定位符号地址。运行环境中,程序被载入内存执行,使用堆栈和静态内存,直到正常或意外终止。多文件项目需分别编译后链接合并,确保跨文件函数调用正确解析。

2025-10-30 19:45:14 922

原创 文件操作(全)

存储在硬盘的文件就是文件?但在程序中,有两种文件:一种叫做程序文件,一个叫做数据文件函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件输入流fwrite二进制输出文件输出流。

2025-10-29 00:30:00 1067

原创 动态内存管理

本文主要介绍了C语言中的动态内存分配机制。文章首先对比了静态内存分配的局限性(固定大小、无法调整),阐述了动态内存分配的必要性。详细讲解了malloc、calloc、realloc和free函数的使用方法及注意事项,包括NULL指针检查、内存释放和野指针处理。通过代码示例分析了常见的动态内存错误,如越界访问、多次释放和内存泄漏。文章还解析了4个经典笔试题,展示了动态内存分配的典型问题及解决方案。最后介绍了柔性数组的概念、特点和使用优势,并总结了C/C++程序的内存区域划分。全文强调动态内存管理的重要性,提醒

2025-10-17 00:04:53 953

原创 自定义类型:联合与枚举

摘要:联合体(union)是一种特殊的数据类型,其所有成员共享同一内存空间,大小由最大成员决定。与结构体相比,联合体更节省内存,但同一时间只能存储一个成员值。文章详细介绍了联合体的声明、特点、大小计算及实际应用场景,如礼品清单存储设计。同时对比了联合体与结构体的区别,并通过大小端判断的实例展示了联合体的实用价值。此外,还简要介绍了枚举类型及其相比#define定义常量的优势。

2025-10-10 23:31:40 646

原创 自定义类型:结构体

1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以 选择其他类型2. 位段的成员名后边有一个冒号和一个数字我们平常在写结构体代码时会这么写:struct Aint _a;int _b;int _c;int _d;我们先来看看会占几个空间,根据对齐规则,结构体大小为16而位段需要`在后面加上冒号和数字struct Aint _a : 2;int _b : 5;那么会占几个空间呢?这里只占了8个空间,这是为啥?

2025-10-09 05:30:00 767

原创 数据在内存中的存储

大端存储模式低数值的内容保存在高地址处,而数据的高数值内容,保存在低地址处小端存储模式低数值的内容保存在低地址处,而数据的高数值内容,保存在高地址处。

2025-09-29 17:05:37 788

原创 C语言内存函数

memcpy会将源字符向目标赋值num个字节的数据到目标参数里这个函数遇到‘\0’时不会停下所有源字符串和目标字符串有任何的重叠,复制的结构都毫无意义返回值:目标字符串的指针中的数据调试结果:接下来进行模拟实现我们知道memcpy是将src的内容拷贝到dest和前面strcpy类似,可这里的参数是void*,void*不能直接进行运算,所以需要进行强转换,可是进行强制转换要使用那个函数呢?用int吗?

2025-09-20 01:25:26 1146 1

原创 字符函数和字符串函数 last part

我们接下来要说的的函数是:strncpy、strncat、strncmp,这三个之间和strcpy、strcat和strcmp有啥不同呢?差别在于strcpy、strcat、strcmp只有两个参数,而strncpy、strncat、strncmp有三个参数,那么多了哪个参数呢?这两者之间的区别是一个没有限制字符长度,一个有限制字符的长度。

2025-09-10 00:10:45 594

原创 字符函数与字符串函数 part1

在C语言中有一系列函数是专门用来分类字符,需要包含<ctype.h>头文件使用isalnum这些函数的使用方法相似,这里我选几个来介绍。

2025-09-02 02:48:59 678

原创 深入理解指针Last part2

代码1:运行结果:代码2:上面两行代码因运行时会崩溃,这里先注释起来运行结果:代码3:运行结果:代码4:运行结果:运行结果:前面有提到数组名是首元素的地址,有两种情况除外:sizeof(数组名):表示的是整个数组名,计算整个数组的大小&(数组名):代表整个数组名,取出的是整个数组的地址其他的情况都是数组名为首元素地址代码1:先创建数组,数组中有五个元素,ptr的类型为int*,而数组/素为int,需要进行强转换,&取出的是整个数组再+1,再来看输出,分别是*(a+1)和*

2025-08-21 20:00:00 620

原创 深入理解指针Last part1

在之前我们使用了qsort实现了整型排序和结构体排序,这次要使用冒泡的方式模拟qsort,在这之前我们先回顾下快排的代码运行结果:接下来要使用冒泡排序的方式来模拟qsort,在上篇文章有说哪里需要变动,这里我再提一次知道怎么改造后开始写代码,第一步我们先看qsort的参数是如何使用的我们将参数套用到自己改造的bobblesort函数,第一步先改造参数第二步需要改造比较部分,需要让其可以比较不同类型的数据,第二步要这样改造呢?

2025-08-15 01:09:49 619

原创 深入理解指针part6

回调函数是将一个函数指针变量调用的函数当我将指针当作另一个函数的参数传给另一个函数,当指针被调用来调用其指向的函数时,这就叫函数调用函数调用不是给实现方调用的,是在特定的条件或事件中由另一方来调用,对用于该条件和时间的响应我们看到这段代码很冗余, 那要怎么办呢?

2025-08-04 00:15:00 569

原创 深入理解指针part5

这里讲述了函数指针变量、typedef的使用方法和转移表

2025-07-24 01:26:28 398

原创 深入理解指针part4

二级指针是用来储存一级指针的指针变量,可以将他们理解为俄罗斯套娃,将一个变数先存入一级指针再将一级指针变量中的数据储存至二级指针变量中,读取时二级指针**ppa透过*ppa找到pa进行解引用才得到a本身运行结果。

2025-07-10 04:38:36 880

空空如也

空空如也

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

TA关注的人

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