- 博客(23)
- 收藏
- 关注
原创 C++内存管理
本文概述了内存分布与C++动态内存管理的关键内容。内存分为栈区(向下增长)、堆区(向上增长)、静态区、代码段和内存映射段。C++通过new/delete替代C语言的malloc/free等函数,提供更便捷的内存管理方式。对于内置类型,new/delete本质调用全局函数operator new/delete;对于自定义类型,它们还会调用构造/析构函数。malloc/free与new/delete的主要区别包括:函数vs操作符、初始化能力、类型安全、异常处理等。文章最后强调内存泄漏的危害,即程序失去对已分配内
2025-11-17 15:20:48
897
原创 C++类和对象(三)
本文介绍了C++中关于类的几个重要概念:构造函数初始化列表、explicit关键字、static成员、友元机制、内部类和匿名对象。初始化列表用于高效初始化成员变量,explicit防止隐式转换,static成员为类共享且需类外定义。友元机制(包括友元函数和友元类)突破了封装限制但增加了耦合性。内部类作为外部类的友元可直接访问外部类static成员。匿名对象生命周期短暂,适用于即用即弃场景。这些特性共同构成了C++类的核心机制,在实现封装的同时提供了必要的灵活性。
2025-11-13 15:58:59
663
原创 C++类和对象(二)
六个成员函数:初始化和清理:默认构造函数和析构函数,拷贝赋值:拷贝构造函数,赋值重载,取地址:主要是普通对象和const对象。
2025-11-12 16:58:22
721
原创 C++类和对象(一)
摘要:本文介绍了C++面向对象编程的核心概念。对比了面向过程(C语言)和面向对象(C++)的区别,重点讲解了类的定义、访问限定符、封装特性及类对象的大小计算。文章详细说明了类成员函数的this指针机制,解释了编译器如何通过this指针区分不同对象实例。此外,还分析了结构体内存对齐原则及其优化方法,并比较了C++中class和struct的关键差异。这些内容是理解C++面向对象编程基础的必备知识。
2025-11-12 11:39:01
904
原创 C++基础知识
windows下讲不清楚,我们来Linux下讲讲(不同编译器都有不同的修饰规则),在Linux环境下,重载所得的同名函数的命名修饰规则为:_Z+(函数名长度)+(函数名)+(参数类型首字母),belike:_Z3Addii,这也就是为什么我们要求形参列表不能相同的原因,通过该命名修饰规则,就可以通过符号表找到该函数的地址。而链接阶段就是处理寻找同名函数的地址的,通过符号表的定位就能找到所需要的重载函数并链接到一起,链接器通过函数名修饰规则找到对应的函数地址。链接:链接源文件,合并段表,符号表的合并和定位。
2025-11-11 18:06:38
814
原创 C语言数据结构-排序
小规模数据:插入排序、冒泡排序大规模数据:快速排序、堆排序、归并排序内存敏感:堆排序稳定性要求:归并排序、插入排序链表排序:归并排序。
2025-10-10 16:47:56
783
原创 C语言数据结构-堆
建堆:O(n)插入/删除:O(logn堆排序:O(n lognk场景堆的应用解决场景堆是实现优先级队列的理想数据结构。堆可以在O(logn)时间内完成插入和删除最高优先级元素的操作。堆排序:堆排序是一种基于堆的选择排序,时间复杂度为O(n logn求Top K问题:在一组数据中找出最大(或最小)的K个数。可以使用一个大小为K的最小堆(找最大K个数)或最大堆(找最小K个数)来高效解决,时间复杂度为O(n logK。
2025-09-30 21:51:54
806
原创 C语言数据结构-二叉树
表达式树:用于编译器的语法分析哈夫曼树:用于数据压缩二叉搜索树:用于快速查找AVL树/红黑树:用于保持平衡的搜索树二叉树是一种重要的数据结构,掌握其遍历方式和性质对于学习更复杂的数据结构至关重要。
2025-09-30 18:15:18
854
原创 C语言数据结构-栈和队列
本文将以数组作为基础结构实现栈,所以和顺序表的实现较为相似//重定义int类型为STDataTypetypedef struct Stack//重定义栈的类型//数据int _top;//栈顶//栈的容量}Stack;//重定义为Stack类型队列的实现需要两个基本节点,队头和队尾,每个节点需要有指向下一个节点的指针和保存当前节点的数据//重定义int类型为QDataTypetypedef struct QueueNode//重定义struct QueueNode。
2025-09-26 11:14:55
556
原创 C语言数据结构-链表
链表与顺序表的应用场景对比 顺序表适用场景: 需要频繁随机访问元素(时间复杂度O(1)) 数据规模变化不大,空间利用率要求高 尾部插入删除操作较多(时间复杂度O(1)) 单链表适用场景: 频繁在任意位置插入删除(时间复杂度O(1)) 数据规模变化大,需动态管理内存 不需要随机访问元素 总结:顺序表适合查找密集型操作,链表适合修改密集型操作。实际应用中,顺序表更常用作数据存储结构,链表则多作为其他数据结构的子结构(如哈希表、图的邻接表等)。
2025-08-07 16:50:06
793
原创 C语言数据结构-顺序表
本文介绍了线性表及其实现方式,重点阐述了顺序表的结构和操作。线性表是逻辑连续的数据结构,包括顺序表、链表、栈和队列等,适用于不同场景。顺序表使用数组存储,分为静态和动态两种实现方式,动态顺序表通过realloc自动扩容。文章详细讲解了顺序表的初始化、扩容检查、数据打印等基础操作,并提供了头插/尾插、头删/尾删、查找、插入等核心接口的实现代码。顺序表支持O(1)随机访问,但插入/删除头部元素需O(n)时间移动数据,尾部操作则为O(1)。文中示例代码均包含错误处理和边界检查,是学习基础数据结构的实用参考。
2025-08-03 18:14:20
902
原创 C语言数据结构-数据结构简介及复杂度
摘要:本文介绍了数据结构与算法的基本概念,重点分析了复杂度对程序效率的影响。数据结构分为线性、非线性和哈希三类,算法具有有穷性等五个特性。复杂度从时间和空间两个维度考量,采用大O渐进表示法评估性能。文章详细解释了时间复杂度、空间复杂度的计算方法,并比较了常见复杂度等级(O(1)到O(n²))。特别指出递归与迭代的空间复杂度差异,以及算法在最坏、平均情况下的性能表现。随着计算机发展,时间复杂度比空间复杂度更受重视。
2025-08-03 15:58:36
870
原创 UEC++开发之关于如何处理头文件和模块之间的关系
头文件一般 .h 结尾,用于:UE5项目是由一个或多个模块组成的,每个模块就是一个功能区域,比如:模块之间的依赖关系决定了头文件能不能被访问!
2025-04-15 20:36:38
540
原创 UEC++开发知识之匿名函数
匿名函数(Anonymous Function),也称为 Lambda 函数 或 闭包(Closure),是一种无需显式定义函数名即可直接使用的函数。它在现代编程语言(如 C++、Python、JavaScript 等)中被广泛用于简化代码、实现回调逻辑或临时函数逻辑。
2025-03-24 16:22:49
617
原创 UEC++开发时遇到GENERATED_BODY()宏报错问题解决办法
这是UE开发中最常见的“坑”之一,但也正是这种严格的约束,使得UE的反射系统能够高效稳定地运行。Unreal Header Tool在编译前扫描代码,识别 UCLASS、UFUNCTION 等宏,并生成对应的反射代码(如 MyActor.generated.h 文件)。UHT的解析器对代码格式高度敏感,它通过特定的语法规则(如宏位置、缩进)来确定代码结构。任何意外的换行或代码顺序都会破坏解析逻辑。GENERATED_BODY() 的作用是标记代码插入点,UHT会将生成的代码替换该宏。
2025-03-22 09:56:53
1294
2
原创 C语言基础知识六——调试技巧
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户使用环境准备,调整为Debug模式学会快捷键, 开始调试 F5,开始执行不调试ctrl+F5,逐语句F11,逐过程F10,切换断点F9F5一般配合F9使用,通过F9在需要打断调试的地方打断点,在点F5,就可以监视已执行的代码F11更加细腻,推荐使用F11当开始调试时,可以打开监视窗口,可对代码数据进行监视。
2025-03-08 16:05:47
167
原创 C语言基础知识五
在计算机科学之中,指针是编程语言之中的一个对象,利用地址,它的值直接指向存在电脑存储器之中的另一个地方的值,由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此将地址信息形象化的称为指针,意思是通过它能找到以它为地址的在32位机器之中,通电之后会产生电信号,电信号有正电和负电,转化为数字信号后就是32位0和1组成的数字序列,在这之中产生的编号就是的编号指针就是变量既称为指针变量又称为地址变量,用来存放地址的变量(存放在指针中的值都被当成地址处理)
2025-03-08 09:13:44
691
原创 C语言基础知识二
C语言具有三种结构:顺序结构、选择结构、循环结构(插入:C语言中0表示假,非0表示真。分支语句2.1 if2.1.1 语法结构:if( 表达式 )语句1;else if( 表达式 )语句2;else语句3;2.2 switch2.2.1 switch也是一种分支语句,常用于多分支2.2.2 语法:switch(整型表达式)case+整型常量表达式;case决定的入口,break决定出口,如果没有break,则从入口处一直执行到结束。
2025-01-15 10:16:03
1838
原创 【UE蓝图通信方式】
1.UE之中不存在无差别通信,只能1V1或者1V多2.因此,蓝图通信最重要就是获取通信方的引用3.获取通信对象引用的方式包括:get all actor of class、cast to、create…4.蓝图通信的方式有五种:直接蓝图通信、事件分发器、蓝图接口(理论上属于直接蓝图通信)、蓝图转换(也叫蓝图继承cast to…)
2024-12-24 17:12:24
2271
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅