自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常见的算法思路总结更新集...

这段时间在刷一些编程题过程中,对解题思路的总结,也会不断更新这个博客,希望能对大家有所帮助!

2025-03-18 11:18:13 899

原创 进程替换技术和实现方法

首先通过fork()函数创建子进程(写实拷贝的方式,和父进程共享数据段和代码段),然后调用exec类函数在物理内存中将子进程的的数据段和代码段替换成新程序的数据段和代码段,最后父进程等待子进程结束,完成回收。意义:父进程创建子进程时,通常需要子进程执行不同的任务,而子进程中通过进程替换,能让子进程代码更加丰富,以及程序灵活调度。进程替换技术是一种在操作系统中,在不创建新进程的前提下,实现当前进程的数据和代码的完全替换为新程序的代码和数据。特点:进程替换替换的是程序而非进程本身,因此进程的ID不会改变。

2025-03-04 16:26:18 379

原创 深入浅出 C++ 左值引用与右值引用的区别

左值时表示数据的表达式(如变量或解引用的指针),可以获取其地址并且还可以对其赋值,另外左值可以出现在赋值符号左边和右边,而右值不能出现在赋值符号左边。右值是不能取地址的。

2024-12-29 19:57:41 524

原创 C++之多态

通俗来说就是,即目标去实现某一行为,当对象不同时会产生。

2024-12-20 09:55:03 358 3

原创 数据结构之旅:红黑树如何驱动 Set 和 Map

红黑树是一种二叉搜索树,在每个节点上增加一个存储位表示结点的颜色(红色或者黑色)。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保不会有一条路径比其他路径长出两倍,因而这种树是一种接近平衡的。和AVL(平衡二叉搜索树)区别就是不需要严格计算并控制平衡因子使得左右子树之间的高度差不超过1的繁琐过程。

2024-12-20 09:52:48 697

原创 平衡二叉树的魔法:用C++构建高效的AVL树

当插入新节点之后,插入位置的父节点平衡因子变为非零,则要依次往上更新父节点的平衡因子,直到检查到根节点都满足平衡因子的绝对值小于2即可;当出现平衡因子绝对值大于二时,则要采用对应的旋转方法,(右高左低则左旋,左高右低则右旋,既有左高又有右高则要双旋),使平衡因子的绝对值小于2。旋转时定好旋转中心,右旋时旋转中心左边结点的右节点要填补旋转中的左节点;左旋时旋转中心的右边的左结点要填补旋转中心的右节点。

2024-11-28 11:23:22 1098 4

原创 C++ set 和 map 初探:数据管理的利器

set是按照一定次序存储元素的容器(底层是二叉搜索树)。set通过key的值来实现搜索查找的,并且常常不用描述value的信息,是因为set底层实际存放的是由<key,key>构成的键值对,因此set再插入元素时间,只需插入key就行,不需要去构造键值对,另外key为const类型,因此不能修改key的值,不然会破坏二叉搜索树的结构。下面本文将介绍set的特性以及常见的功能。和set容器功能基本相同,但是其底层是变异搜索树,可以存入相同元素,因此该容器不具有去重的功能。

2024-11-24 15:03:14 1111 11

原创 C++之二叉搜索树

二叉搜索树通过从根节点开始比较,如果要找对象的值大于根节点,那么往右边查找;反之则往左边查找(一层只需要做一次对比),然后重复上述步骤直到找到空结点为止,若还没找到,则这棵树中不存在要找的对象,因此可得出的结论,搜索二叉树查找次数和树的高度是相等的。(2)如果树不为空,按照二叉搜索树的特性找到要插入数据的位置,然后插入新节点。首先在树中存储字典的中英文,然后根据英文的字符串大小搜索寻找对应的中文翻译。(接近完全二叉树)或者 N (接近单枝树)。(1)当树为空,那么直接插入当前节点。

2024-11-22 17:09:22 297 3

原创 C++之继承

其中继承方式是可以省略的,如果子类是class修饰的类,则默认继承方式为private;如果子类是struct修饰的类,则默认继承方式为public。

2024-11-08 22:07:26 985 9

原创 C++中的常用容器类的区别(string/vector/array/list/deque)

vector是可变大小数组的序列容器。类似于数组,可以采用连续的空间来存储元素,即vector可以通过下标实现对内部元素的随机访问,和数组一样高效,其优点是可以动态改变存储空间大小,增容方式和string类一样,当有元素插入时,其现有空间不足以存储新元素,那么就会进行增容,增容大小是倍数增长的,为了减少增容次数,提高效率。vector()//初始化列表{}//(迭代器初始化)template<class InputIterator>//写成模板方便调用自定义类型。

2024-11-03 13:03:08 856 1

原创 仿函数和优先级队列(priority_queue)

仿函数是通过类的方式来实现函数的调用,在类中通过对运算符()的重载,然后通过声明的或者匿名的对象完成运算符重载内容的使用(形式和函数调用一样)。

2024-10-30 20:22:41 334

原创 C++中的栈和队列

(1)队列适合先进先出(FIFO)场景,即元素的插入(入队列)和删除(出队列)分别从容器的两端进行插入和删除数据。队列是通过链表实现的,插入数据过程中new创建的空间是随机的,内存的位置先后也是随机的,只有同时new出的多个同类型的空间地址才是有序的,并且按照低地址往高地址的顺序。栈(stack)和队列(queue)均可以存放各种类型的元素,但是在标准库(STL)中并没有将二者划为容器领域,而是将其称为容器适配器,它们将其它容器进行包装使用,也就是通过容器中的函数来实现栈和队列的功能。1、栈(stack)

2024-10-26 22:20:07 191 1

原创 C++动态内存管理

功能:直接在堆中申请一个连续空间,其空间大小由malloc()内的形参决定(单位为字节),开辟成功之后,返回开辟的指针空间的首地址(void*);开辟失败则返回空指针。//括号里面为我们所需要开辟的字节数,地址中存放的数据为随机值。free(ptr1);return 0;表达式:new+空格+类名+(初始化参数)class M {public:M(int a = 0, int b = 0)//初始化列表:_a(a), _b(b)~M() {private:int _a;

2024-09-08 22:23:44 858

原创 类与对象(一)

析构函数是一种无参数无返回值和类同名的特殊函数,其作用并不是完成对对象本身的销毁,对象销毁是编译器完成的,而对象在进行销毁时会自动调用析构函数,完成对象中资源的清理工作。public:~Date() {//通过打印窗口观察这段代码执行否Date d1;return 0;另外,和构造函数一样,但是析构函数不能重载。当程序员没有写构造函数时,编译器会生成默认析构函数,如果类中没有资源申请(malloc,realloc申请的空间)时可以直接使用编译器生成的默认析构函数;

2024-07-31 10:56:38 880

原创 初始C++(三)

原理:用宏名来表示一个函数,在宏使用时,直接将函数来取代宏名。//如果不给x和y分别加括号,对于add(a|b,a&c)这种运算会出问题return 0;缺点:(1)由上面代码可知宏定义函数容易出错。(2)不能调试,而是直接被替换。(3)无类型安全的检查。优点:(1)无类型的严格限制。(2)针对频繁调用的函数无需再建立栈帧,从而提高效率。2、内联函数以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,不会建立函数栈帧,提升程序运行的效率。

2024-07-20 14:31:57 349

原创 初识C++(二)

(1)头文件展开(拷贝头文件中的内容)和命名空间的展开有很大区别 -> 宏定义的替换 -> 去掉注释(换成空格) -> 条件编译(处理源代码中含有#ifdefd的命令)-> 生成test.i文件。在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间,但是在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。(2)很适合输出型参数使用(在函数中需要直接提取的数据,在形参中修改时,实参也会跟着变,这种引用参数可以直接在函数中赋值我们所需要的结果)。要求:(1)引用在定义时必须初始化。

2024-07-19 21:16:18 422 3

原创 初识C++(一)

在如下代码中定义了一个全局变量和一个add函数,然后定义了一个命名空间Hu,空间中包含与上面变量和函数相同的名称。另外,如果命名空间的名字相同则编译器会自动合并。//定义命名空间(定义作用域)return a+b;

2024-07-18 12:59:40 456

原创 浅谈栈与队列

通常用链表的方式来实现队列,因为队列在执行出队操作时,是从队头出的,顺序表执行头删后需要将数组后面元素整体进行前移,而链表就很好避免了这一缺点。通常用顺序表的形式来实现栈,因为链表在实现尾删操作的时候要引入prev(前节点指针,会多一个变量,过程稍许复杂。一种特殊的线性表(顺序表),只允许在固定的一端进行插入和删除元素。只允许在一端插入数据,在另一端删除数据。(1)压栈:在栈顶进行插入。(2)出栈:在栈顶进行删除。(1)入队:在队尾进行插入。(2)出队:在队头进行删除。

2024-05-09 10:38:19 160 2

原创 算法的时间复杂度

下面算法中要计算Function5(int N)函数所执行的次数,首先可推理:F(N) = F(N-1)*N,F(N-1) = F(N-2)*(N-1).......F(2) = F(1)*2,F(1) = F(0)*1。下面算法中要计算斐波拉契函数得时间复杂度,首先可推理:F(N)=F(N-1)+F(N-2),F(N-1)=F(N-2)+F(N-3).......F(4)=F(3)+F(2),F(3)=F(2)+F(1)。(1) 常数函数时间复杂度O(1)(3) 函数递归中的复杂度计算。

2024-04-20 22:07:40 319 3

原创 C语言实现扫雷游戏

本代码实现的在9*9的棋盘中进行扫雷的,根据扫雷的游戏规则当选中的方格为非雷时,应该在该位置显示以此为中心的3*3方格中雷的个数,代码中实际所设置的棋盘为11*11的规格,这样就可以使边界线上的方格使用和其它方格一样的方法统计周围雷的个数,方便运算。为了让游戏能有更好的体验,如果玩家选中的坐标周围雷的个数为零的时候,就把与该坐标四周连续的坐标(四个角的坐标也算),并且该连续的坐标周围雷的个数也为零的坐标进行排除,直到遇见一个周围雷的个数不为0是,才结束本轮的一次多排任务。表示未进行的排雷的方格。

2023-11-06 15:59:33 72

原创 C语言分支与循环结构学习总结

for语句常见格式如下图:其中表达式1为数值的初始化,表达式2为判断条件,表达式3为判断条件中的判断数值的调整。如下图:执行顺序是先判断条件,如果满足则进入循环体执行语句,因此初始化时一定要满足判断条件,不然进不去循环体,中的语句,执行完一次后,再执行判断条件,如果满足则继续进入循环,如果不满足则结束循环,因此。条件处开始判断的,当满足其中任何一个判断条件时,就会执行该判断条件下的。是一样的都遵循先初始化数值,然后执行判断条件,最后调整判断的数值。中的判断语句,不在进行判断 ,即这一整套if语句执行完毕。

2023-10-25 18:34:02 78 1

原创 立创eda画PCB时导入的封装出现焊盘与过孔距离的报错

进入封装编辑页面后->删除过孔 -> 选中底层 -> 在底层添加异形焊盘(其尺寸和顶层一样)-> 加上过孔,这样顶层就可以和底层通过过孔连接。解决方法:在PCB中选中器件->点击鼠标右键->编辑封装->仅应用选中元件。最后保存并退出封装编辑,然后重新导入原理图至PCB即可解决此问题。

2023-10-16 13:25:10 6145 2

原创 重拾C语言第一天感慨

在本科期间参加过一次智能车比赛,那会还没有系统性的学习过C语言,但是在那会接触之后,C语言真的很能激起我的兴趣,对那些C语言大佬心生仰慕,从那会开始,我就决定要重头开始学习C语言,但是下决心简单,可付诸行动时很艰难,直到本科毕业都没能坚持当时的初心,越往后事情就越来越繁忙。我计划每天抽2-3个小时学习C语言,尽量抽更多时间来训练自己对各中语句使用,以至扎根于心。希望通过自己在这段路程上能不断成长,并能掌握这项编程技能,丰富自己的认知,也希望以后能进字节跳动,抖音等一些大厂中找到自己一份满意的工作。

2023-10-10 22:24:19 71 1

空空如也

空空如也

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

TA关注的人

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