- 博客(192)
- 资源 (1)
- 收藏
- 关注
原创 【UE】UEC++ 加载本地图片(LoadImageFromFile)和本地文件夹内所有图片(LoadAllImagesFromFiles)
【UE】UEC++ 加载本地图片(LoadImageFromFile)和本地文件夹内所有图片(LoadAllImagesFromFiles)
2024-08-12 16:05:49 351
原创 C++PrimerPlus 第九章 内存模型和名称空间-9.3 名称空间
在C++中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。当随着项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突。例如,两个库可能都定义了名为List、Tree和Node的类,但定义的方式不兼容。用户可能希望使用一个库的List类,而使用另一个库的Tree类。这种冲突被称为名称空间问题。C++标准提供了名称空间工具,以便更好地控制名称的作用域。经过了一段时间后,编译器才支持名称空间,但现在这种支持很普遍。
2024-05-21 10:49:01 759
原创 C++PrimerPlus 第九章 内存模型和名称空间-9.2 存储持续性、作用域和链接性
C++的存储方案决定了变量保留在内存中的时间(存储持续性)以及程序的哪一部分可以访问它(作用域和链接性)。自动变量是在代码块(如函数体或函数体中的代码块)中定义的变量,仅当程序执行到包含定义的代码块时,它们才存在,并且可见。自动变量可以通过使用存储类型说明符register或根本不使用说明符来声明,没有使用说明符时,变量将默认为自动的。register说明符提示编译器,该变量的使用频率很高,但C++11摒弃了这种用法。
2024-05-21 09:57:45 975
原创 C++PrimerPlus 第九章 内存模型和名称空间-9.1 单独编译
如果文件名包含在尖括号中,则C++编译器将在存储标准头文件的主机系统的文件系统中查找:但如果文件名包含在尖括号中,则编译器将首先查找当前的工作目录或源代码目录(或其他目录,这取决于编译器)。将结构声明放在头文件中是可以的,因为它们不创建变量,而只是在源代码文件中声明结构变量时,告诉编译器如何创建该结构变量。例如,如果在头文件中包含一个函数定义,然后在其他两个文件(属于同一个程序)中包含该头文件,则同一个程序中将包含一个函数的两个定义,除非函数是内联的,否则这将出错。因此,可以将原来的程序分成三部分。
2024-05-20 17:15:37 995
原创 【UE】UEC++ DataTable数据表
DataTableComponent上有一个DataTablePath的属性,这里存储了DataTable的路径,在不同情况下设置不同的路径,就可以对不同的DataTable进行操作。声明一个组件,就可以在需要的类上挂载组件,进行对DataTable的处理。
2023-12-10 17:11:35 1100
原创 【UE】UEC++ CurveFloat、CurveVector、CurveLinearColor
UEC++ CurveFloat、CurveVector、CurveLinearColor。
2023-12-05 10:30:49 977
原创 【UE】UEC++获取屏幕颜色GetPixelFromCursorPosition()
创建一个蓝图方法库方法GetPixelFromCursorPosition(),并给他指定UFUNCTION(BlueprintCallable),这样就可以在蓝图里对函数做简单测试。
2023-12-02 16:33:19 834
原创 树结构及其算法-线索二叉树
虽然我们把树转换为二叉树可减少空间的浪费——由2/3降低到1/2,但是如果仔细观察之前使用链表建立的n节点二叉树,那么会发现用来指向左右两个节点的指针只有n-1个链接,另外的n+1个指针都是空链接。所谓线索二叉树(Threaded Binary Tree),就是把这些空链接加以利用,再指到树的其他节点,这些链接就称为线索(Thread),而这棵树就称为线索二叉树。和链表所建立的二叉树不同之处在于。为了区别正常指针或线索而加入的两个字段:LBIT和RBIT。
2023-11-05 23:57:52 196
原创 树结构及其算法-二叉排序树
事实上,二叉树是一种很好的排序应用模式,因为在建立二叉树的同时,数据已经经过初步的比较,并按照二叉树的建立规则来存放数据
2023-11-05 05:57:22 185
原创 树结构及其算法-二叉运算树
二叉树的应用实际上相当广泛,例如表达式之间的转换。可以把中序表达式按运算符优先级的顺序建成一棵二叉运算树(Binary Expression Tree,或称为二叉表达式树)。
2023-11-05 05:04:34 301
原创 树结构及其算法-二叉树节点的删除
二叉树节点的删除操作稍为复杂,可分为以下3种情况。删除的节点为树叶,只要将其相连的父节点指向NULL即可。删除的节点只有一棵子树。删除的节点有两棵子树。要删除节点,方式有两种,虽然结果不同,但是都符合二叉树的特性。
2023-11-02 01:45:51 502
原创 树结构及其算法-二叉树节点的插入
二叉树节点插入的情况和查找相似,重点是插入后仍要保持二叉查找树的特性。如果插入的节点已经在二叉树中,就没有插入的必要了,如果插入的值不在二叉树中,就会出现查找失败的情况,相当于找到了要插入的位置。
2023-11-01 16:31:25 253
原创 树结构及其算法-二叉查找树
二叉树在建立的过程中是根据“左子树 < 树根 < 右子树”的原则建立的,因此只需从树根出发比较键值即可,如果比树根大就往右,否则往左而下,直到相等就找到了要查找的值,如果比较到nullptr,无法再前进,就代表查找不到此值。
2023-11-01 16:24:47 125
原创 树结构及其算法-二叉树遍历
我们知道线性数组或链表都只能单向从头至尾遍历或反向遍历。所谓二叉树的遍历(Binary Tree Traversal),简单的说法就是访问树中所有的节点各一次,并且在遍历后将树中的数据转化为线性关系。对于一棵简单的二叉树节点来说,每个节点都可分为左、右两个分支,可以有ABC、ACB、BAC、BCA、CAB和CBA六种遍历方法。如果按照二叉树的特性,一律从左向右遍历,就只剩下3种遍历方式,分别是BAC、ABC、BCA。对于这3种遍历方式,大家只需要记住树根的位置,就不会把前序、中序和后序搞混了。
2023-11-01 16:11:28 171
原创 树结构及其算法-用链表来实现二叉树
使用链表来表示二叉树的好处是节点的增加与删除操作相当容易,缺点是很难找到父节点,除非在每一个节点多增加一个指向父节点的指针。以链表实现二叉树就是使用链表来存储二叉树,也就是运用动态分配内存和指针的方式来建立二叉树。
2023-11-01 15:42:21 212
原创 树结构及其算法-用数组来实现二叉树
使用有序的一维数组来表示二叉树,首先可将此二叉树假想成一棵满二叉树,而且第层具有个节点,按序存放在一维数组中。首先来看看使用一维数组建立二叉树的表示方法以及数组索引值的设置。接着来看如何以一维数组建立二叉树的实例,实际上就是建立一棵二叉查找树。这是一种很好的排序应用模式,因为在建立二叉树的同时数据就经过了初步的比较判断,并按照二叉树的建立规则来存放数据。
2023-11-01 12:19:19 663
原创 堆栈和队列算法-双向队列
双向队列(Double Ended Queues,DEQue)为一个有序线性表,加入与删除操作可在队列的任意一端进行。具体来说,双向队列就是允许队列两端中的任意一端都具备删除和加入功能,而且无论是队列的左端还是右端,队首与队尾指针都是朝队列中央移动的。通常,双向队列的应用可以区分为两种:一种是数据只能从一端加入,但可以从两端取出;另一种是数据可以从两端加入,但只能从一端取出。
2023-10-31 14:17:31 54
原创 堆栈与队列算法-以链表来实现队列
队列除了能以数组的方式来实现外,也可以用链表来实现。在声明队列的类中,除了和队列相关的方法外,还必须有指向队列前端和队列末尾的指针,即front和rear。
2023-10-31 11:37:13 103
原创 堆栈与队列算法-用数组来实现队列
用数组结构来实现队列的好处是算法相当简单,不过与堆栈不同的是需要拥有两种基本操作:加入和删除,而且要使用front与rear两个指针来分别指向队列的前端与末尾,缺点是数组大小无法根据队列的实际需要来动态申请,只能声明固定的大小。
2023-10-31 10:29:05 328
原创 堆栈与队列算法-八皇后问题的求解算法
八皇后问题是一种常见的堆栈应用实例。在国际象棋中的皇后可以在没有限定一步走几格的前提下,对棋盘中的其他棋子直吃、横吃和对角斜吃(左斜吃或右斜吃均可)。现在要放入多个皇后到棋盘上,相互之间不能互相吃到对方。后放入的新皇后,放入前必须考虑所放位置的直线方向、横线方向或对角线方向是否已被放置了旧皇后,否则就会被先放入的旧皇后吃掉。利用这种概念,我们将其应用到4X4的棋盘上,就称为四皇后问题;应用在8X8的棋盘上,就称为八皇后问题;应用在NXN的棋盘上,就称为N皇后问题。
2023-10-30 16:30:47 126
原创 堆栈与队列算法-以链表来实现堆栈
虽然以数组结构来制作堆栈的好处是制作与设计的算法都相当简单,但若堆栈本身是变动的话,则数组大小无法事先规划声明。这时往往必须考虑使用最大可能性的数组空间,这样会造成内存空间的浪费。而用链表来制作堆栈的优点是随时可以动态改变链表的长度,不过缺点是设计时算法较为复杂。
2023-10-30 13:43:02 82
原创 堆栈与队列算法-以数组来实现堆栈
以数组结构来实现堆栈的好处是设计的算法都相当简单。不过,如果堆栈本身的大小是变动的,而数组大小只能事先规划和声明好,那么数组规划太大了浪费空间,规划太小了则不够用,这是以数组来实现堆栈的缺点。
2023-10-30 13:16:23 73
原创 数组与链表算法-链表与多项式
使用链表的最大好处就是减少内存的浪费,并且能增加使用上的弹性。例如数学上常用的多项式表示法,虽然可以使用数组方式来处理,但当数据内容变动时对数组结构的影响相当大,算法处理不易。另外,由于数组是静态数据结构,事先必须获取连续的且足够大的内存,容易造成存储空间上的浪费。
2023-10-29 15:21:40 79
原创 数组与链表算法-单向链表算法
在C++中,若以动态分配产生链表节点的方式,则可以先行定义一个类数据类型,接着在类中定义一个指针变量,其数据类型与此类相同,作用是指向下一个链表节点,另外类中至少要有一个数据字段。例如,声明一个学生成绩链表节点的结构,并且包含两个数据字段:姓名(name)和成绩(score),以及一个指针(next)。接着就可以动态创建链表中的每个节点。遍历(Traverse)单向链表的过程,就是使用指针运算来访问链表中的每个节点。
2023-10-28 23:47:01 331
原创 查找算法-斐波那契查找法(Fibonacci Search)
斐波那契查找法又称为斐氏查找法,此查找法和二分法一样都是以分割范围来进行查找的,不同的是斐波那契查找法不是按对半方式来分割的,而是以斐波那契级数的方式来分割的。斐波那契级数的定义如下:斐波那契级数:0、1、1、2、3、5、8、13、21、34、55、89、...。也就是除了第0个和第1个元素外,级数中的每个元素值都是前两个元素值的和。斐波那契查找法的好处是只需要用到加减运算而不需要用到乘除运算,这从计算机运算的过程来看效率会高于前两种查找法。在尚未介绍斐波那契查找法之前,我们先来认识斐波那契树。
2023-10-26 00:17:07 531 2
原创 查找算法-插值查找法(Interpolation Search)
插值查找法又称为插补查找法,是二分查找法的改进版。它是按照数据位置的分布,利用公式预测数据所在的位置,再以二分法的方式渐渐逼近。使用插值查找法是假设数据平均分布在数组中,而每一项数据的差距相当接近或有一定的距离比例。其中,key是要查找的键值,data[high]、data[low]是剩余待查找记录中的最大值和最小值。
2023-10-25 23:47:55 164
原创 查找算法-二分查找法(Binary Search)
如果要查找的数据已经事先排好序了,就可以使用二分查找法来进行查找。二分查找法是将数据分割成两等份,再比较键值与中间值的大小。如果键值小于中间值,就可以确定要查找的数据在前半部分,否则在后半部分,如此分割数次直到找到或确定不存在为止。
2023-10-25 23:36:54 110
原创 查找算法-顺序查找法(Sequential Search)
顺序查找法又称线性查找法,是一种比较简单的查找法。它是将数据一项一项地按顺序逐个查找,所以无论数据顺序如何,都得从头到尾遍历一遍,该方法的优点是文件在查找前不需要进行任何处理与排序;缺点是查找速度比较慢。如果数据没有重复,找到数据就可以中止查找,在最差情况下是未找到数据,需要进行n次比较,在最好情况下则是一次就找到数据,只需要1次比较。
2023-10-25 23:26:42 381
原创 排序算法-堆积树排序法(HeapSort)
堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序时间。堆积排序法用到了二叉树的技巧,是利用堆积树来完成排序的。堆积树是一种特殊的二叉树,可分为最大堆积树和最小堆积树两种。
2023-10-25 23:16:24 746
原创 排序算法-基数排序法(RadixSort)
基数排序法与我们之前讨论的排序法不太一样,并不需要进行元素之间的比较操作,而是属于一种分配模式排序方式。基数排序法比较的方向可分为最高位优先(Most Significant Digit First,MSD)和最低位优先(Least Significant Digit First,LSD)两种。MSD是从最左边的位数开始比较的,而LSD则是从最右边的位数开始比较的。
2023-10-16 00:35:46 692 1
原创 排序算法-合并排序法(MergeSort)
合并排序法(MergeSort)是针对已排序好的两个或两个以上的数列(或数据文件),通过合并的方式将其组合成一个大的且已排好序的数列(或数据文件)
2023-10-15 18:00:37 1023
原创 排序算法-快速排序法(QuickSort)
快速排序法是由C.A.R.Hoare提出来的。快速排序法又称分割交换排序法,是目前公认的最佳排序法,也是使用分而治之(Divide and Conquer)的方式,会先在数据中找到一个虚拟的中间值,并按此中间值将所有打算排序的数据分为两部分。其中小于中间值的数据放在左边,而大于中间值的数据放在右边,再以同样的方式分别处理左右两边的数据,直到排序完为止。操作与分割步骤如下:假设有n项记录,其键值为。
2023-10-12 06:33:57 973
原创 排序算法-希尔排序法(ShellSort)
我们知道当原始记录的键值大部分已排好序的情况下插入排序法非常有效,因为它不需要执行太多的数据搬移操作。希尔排序法是D.L.Shell在1959年7月发明的一种排序法,可以减少插入排序法中数据搬移的次数,以加速排序的进行。排序的原则是将数据区分成特定间隔的几个小区块,以插入排序法排完区块内的数据后再渐渐减少区间的距离。
2023-10-12 04:21:59 885
原创 排序算法-插入排序法(InsertSort)
插入排序法是将数组中的元素逐一与已排序好的数据进行比较,先将前两个元素排序好,再将第三个元素插入适当的位置,也就是说这三个元素仍然是已排序好的,接着将第四个元素加入,重复此步骤,直到排序完成为止。可以看作是在一串有序的记录R1,R2,...,Ri中插入新纪录R,使得i+1个记录排序妥当。
2023-10-12 03:40:48 1402
原创 排序算法-选择排序法(SelectionSort)
选择排序法也是枚举法的应用,就是反复从未排序的数列中取出最小的元素,加入另一个数列中,最后的结果即为已排序的数列。选择排序法可使用两种方式排序,即在所有的数据中,若从小到大排序,则将最大值放入第一个位置;若从小到大排序,则将最大值放入最后一个位置。例如,一开始在所有的数据中挑选一个最小项放在第一个位置(假设是从小到大排序),再从第二项开始挑选一个最小项放在第2个位置,以此重复,直到完成排序位置。
2023-10-12 02:55:48 761
原创 排序算法-冒泡排序法(BubbleSort)
冒泡排序法又称为交换排序法,是从观察水中的气泡变化构思而成的,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较,就仿佛气泡从水底逐渐冒升到水面上一样。如此扫描过一次之后就可以确保最后一个元素位于正确的顺序。接着逐步进行第二次扫描,直到完成所有元素的排序为止。
2023-10-12 02:23:41 933 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人