自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于docker的使用心得

这里我们首先要讲清楚一些概念,先是image即镜像,镜像顾名思义,就是创建了一个和你一样的环境,或者说创建了一个和你一样的电脑,这个电脑里面有你的项目,你配置的文件以及各种环境,有些人就要疑惑了这不就是虚拟机吗?非也,虚拟机和这个还是有本质的差别的,虚拟机你是不是要分配相关的运行内存才能跑起来,最直观的体现就是你要开机,然后人家占用了几个g,但是docker就不需要担心这个问题,它小巧只有十几个mb,这也和docker与你共用一个系统有关系。我们可以通过这样的方式来进行相关的信息交流。

2026-08-13 10:06:19 188

原创 关于相关问题的自我回答2

这里也很好解决这类问题,我们只要把一个强引用的转为弱引用即weak_ptr就可以了,weak_ptr不进行资源的共享,此时我们在遇到刚刚的情况时只要将一种一方的强引用改为弱引用即使用weak_ptr,此时外部指针析构释放时,就不会造成相互引用因为其中一方变为了弱引用,强引用计数归0就会释放内存了,同时因为weak_ptr无法拿到资源我们要使用lock来暂时升级为shared_ptr,此时的强引用计数会增加,使用完毕后会减去,同时如果lock时发现计数为0了则会之直接返回nullptr。

2026-08-04 19:30:29 162

原创 反转链表的问题总结

我们就是进行的黑盒操作,new_head1只会返回我们操作后的链表的头节点,这与我们的需要返回这个反转链表的头节点需求一致,接下来就没有问题了返回new_head1的next即操作后的链表,如果你要解释清楚一代点的话,此时1也被覆盖了所以不会执行for循环即new_head==new_head1,其实我们在操作new_head->next=cur的时候就相当于把虚头节点的next设置为cur,此时我们返回的new_head1的下一个永远是头节点地址。那么进阶的问题来了我们如何处理从任意一段链表的反转呢?

2026-07-31 20:42:37 186

原创 关于相关问题的自我回答

答:进程是操作系统调用资源的最小单位,而线程是cpu执行调度的最小单位,进程的切换开销大,但是线程不大,进程如果崩溃了就会回收所有的资源,而线程则不影响相互的资源,上下文的切换:线程保存的是cpu中寄存器,进程则是保存的线程的资源以及修改相关的页表即独立的地址空间等信息,进程的上限数量由pid_max决定的线程也是。3.c++中多态的实现方式,虚函数表是什么,析构函数或者说构造函数可以是虚函数吗?虚函数和纯虚函数的区别,抽象类是什么,菱形继承问题是什么怎么解决?进程和线程的上限由什么决定?

2026-07-27 21:55:47 206

原创 前缀和的另外一种用法,前缀和分解

对于这个题目,由于我们不能用除法,那么我们用数组来记录避免重复相乘就很重要了,那么问题在于我们如何去存储呢,yaoxiangyiduanshijian(不难想到),我们其实要做的就是除了这个数,前面的乘积乘以后面的乘积,那么是不是就需要两个数组,当然一个也可以,先搞两个直观一点,一个记录前i个不包括i的乘积,一个记录后i个不包括i的乘积,那么结果就出来了。

2026-06-15 17:22:18 196

原创 力扣56合并区间

你想如果是8 10在前面,你会跟前面的比,又会跟后面的比较,就是比较起来麻烦,但是我按照第一个的顺序比较就只需要看后面遍历的,不需要两边看(我说的是for循环遍历数组的视角),那么怎么去合并一个数组呢?,我们先把1 3这个加入ans里面,然后判断第二个的start,如果比第一个的end还小不就说明相交了,那么怎么合并,因为我们排序的缘故,所以第一个数组的start肯定比第二个小,只需要比较末尾元素就行,谁大就取谁(因为有可能第一个的end比第二个大,就是包含的那种情况懂吧),最后把结果返回就行了。

2026-06-12 17:00:42 208

原创 c++的复习——多态

我是这么理解的,就拿cs这个枪战游戏说吧,我们在编写角色武器时,我们有不同的开火逻辑,awp是开一枪,伤害高,ak能连发,伤害相对低,这里我们的角色会根据不同的武器来执行不同的开火逻辑,这里就可以用多态的方式,用一个武器类作为父类,子类有多种awp,ak,a1之类的枪械,我们创造了父类指针指向子,此时对父类的开火函数fire加一个虚函数,子类重写这个虚函数,这样我们调用函数的时候会根据指针指向的对象中的vptr来决定调用哪武器开火逻辑,这是一个例子,多态可以让代码更加规范。

2026-04-21 17:57:39 62

原创 c++复习——const,static字

对于const,其实我们只需要知道const修饰的东西不可以修改就行了,至于int const *p,int *const p这两个有什么区别,其实很好理解的,int const *p就是常量指针,const在前是常量,像int *const p这个*在前就是指针常量,意思是指针指向的常量,那么指针指向的内容是不可以修改的,但是指针可以修改,第一个常量指针,就是指针这个是个常量,指向的地址是不可以修改的,但是指向的地址的那个内容,比如可能指向a,a的值是可以修改的 其实我们在函数里面也用了co

2026-04-21 17:12:43 213

原创 面向对象的原则

其实有人可能会觉得这到底有什么用,感觉还变麻烦了,又创造一个抽象类的接口来进行调用数据库,修改不都是简单的修改一下数据库类型吗?当需求改变,或者说需要进行新的功能的撰写的时候,我们不能对已有的代码进行修改,我们经常听到屎山代码不要随便动,为什么说不要随便动,就是因为我们无法从代码中知道当时的逻辑构架思路,如果我们进行代码的修改的话就可能会产生bug,所以说我们在写代码的时候也要做到注意创造接口,那么我们要如何实现开闭性原则呢?我们在编写代码的时候一个类只能承担一个职责,为什么要这么进行设计呢?

2026-01-06 22:38:33 401

原创 day6力扣复习

本题虽然说移动k个位置,其实我们可以看成k这个位置之前的链表和之后的链表,那么本题就变成了将k之后的链表重新插到头部就行了,同时让k前面的链表的尾部的下一个节点置为空,这里我们需要获得几个东西,首先是k节点之前的的最后一个节点,还有末尾的节点地址,以及节点个数,这里就需要我们进行遍历操作了,不过本题还有一点要注意的是k可以大于链表长度的,所以我们要对k进行取模的操作。删除原始链表中所有重复数字的节点,只留下不同的数字。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。给定一个已排序的链表的头。

2025-12-07 15:37:38 243

原创 day5力扣复习

在链表的删除我们是一般用双指针的方法进行删除的但是这个题目却只给了我们一个指针所以我们要寻找别的方法了,本题有两种写法一种是直接将这个节点拷贝为下一个节点,当然下一个节点没有用了要释放掉,还有一个写法是就是原来的节点不动,把下一个节点的值赋值给这个节点,同时令这个节点node的next等于node的next的next即下下个节点,这里节点因为直接删除了记得释放内存。若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。,请你反转链表,并返回反转后的链表。

2025-12-06 16:12:49 651

原创 day4力扣复习

要注意的是l1和l2的长度可能不一样,所以在一个遍历完了之后要检查另外一个是否遍历完了,如果还没有就直接加在新链表的后面,记得创造链表的head是没有存入val的,此时我们记得要把head=head->next来记录真正的头节点然后返回就行了,记得把这个虚头节点释放掉,然后再就是递归的写法,我们在写递归的时候要注意重复的步骤,比如说把每次比较完大小之后的拼接操作是重复的代码,此时我们只需要递归就能实现了,具体代码如下。:新链表是通过拼接给定的两个链表的所有节点组成的。给定一个已排序的链表的头。

2025-12-03 19:34:18 398

原创 力扣560 和为k的子数组

这题有个更简单的做法,那就是前缀和,我们定义一个新的数组pre,其中pre[i]表示nums的前i个数相加即pre[i]=num[0]+nums[1]+nums[2]...+nums[i],其中更新pre的方法就可以用pre[i]=pre[i-1]+nums[i]来更新,问题来了pre更新了有什么用处呢?子数组是数组中元素的连续非空序列。

2025-11-29 16:05:08 309

原创 day3力扣复习

这道题目很简单,使用双指针的方法就可以解决了,但是我们要注意的是while循环语句的书写,其中fast!=nullptr在前,fast->next!=nullptr在后,如果不这么写,那么在程序执行时会先执行fast->next!力扣203移除链表元素。

2025-11-26 21:28:29 156

原创 力扣3无重复字符的最长字串

所谓滑动窗口,为什么称为滑动,就是因为双指针会移动,使得左右指针形成的一个“窗口”也跟着动,那么如何用这个方法来解决最长字串的问题呢?这个题目的关键是连续,那么我们在遍历到重复的字符的时候就要舍弃前面的字符一直舍弃到字符不重复为止。

2025-11-26 16:56:16 221

原创 力扣42 接雨水

这个题目首先要用到是双指针,一快一慢。

2025-11-24 19:22:04 283

原创 QTday3 bug解决

但是到这里还是有问题,那就是如果本来是好友也会弹窗一下,说不是好友,主要的原因是因为就算判断是好友,chat函数也会读取pdu来,此时的pdu是NULL的,我也不知道为什么,我的ret类型是bool类型。在QT里面的添加好友中我们发现能添加自己为好友,那么也就是说我们要在添加好友函数里面添加一个判断,如果说目标用户是自己,那么返回一个新的ret值,再对这个ret值进行处理,弹出消息框。

2025-11-22 22:35:57 226

原创 day3力扣相关的题型复习

这题我思想是通过不断的累加,如果新的数比累加数的话就抛弃前面的累加数,以这个数为起点进行累加计算,这个题目用的动态规划来进行解决,我的动态规划一开始没有写好,后面改了一下写出来了,主要这个题目的状态转移方程要想对,首先就是更新nums这个数组从哪个起点开始,比之前大就返回新的起点,否则就返回原来的累加就行了,所以我们要一个变量记录最大的连续值。

2025-11-21 19:36:16 168

原创 day2力扣复习

第三种就是用逆序指针,我们用双指针从二者有元素的末尾(nums1有元素的的末尾和末尾不是一个东西)遍历,把大的放入nums1末尾,然后倒数第二个也进行比较,放入大的,循环遍历的条件是二者指针的大小>=0,二者条件用&&连接,然后再处理剩余元素,这里注意只需要写nums2指针>=0的循环就行了,因为如果是nums1中元素还有没有遍历玩的也不需要遍历,因为本身就是有序的,只是nums2的剩余元素要转移到nums1中,如果nums2没有遍历完要遍历放入一下。这么做的可以的原因之前解释过,可以看之前 的。

2025-11-19 23:47:44 202

原创 力扣128最长序列

其实主要还是这个排序,一般都会想到排序,重点是去重,这样就不会受影响。

2025-11-19 17:48:48 224

原创 day1力扣题的复习

这里还有个更简单的方法,定义一个vector<int>nums1,大小为nums.size(),再定义一个p记录下标初始值为0,for循环遍历nums,如果说nums的中的值不等于val就将nums1[p]更新为nums的这个值,然后p++,最后将nums1赋值给nums就行了。这题和26有点像,此时我们将代码的nums[fast]!=nums[fast-1]改为nums[fast]!=val并且创建一个p来进行记录更新了多少次就行了。

2025-11-17 20:57:36 124

原创 力扣49字母异位词分组

比如说nat,tan,如果排序后都是ant,对,我们可以用这个来归类一个字符串,当然记录字符类型和个数也可以,不过还是采用这个方法讲解一下,首先创造一个哈希表,键值对的类型之前说了,然后遍历strs,这里我们用另一个值key来存排序后的字符串,在这之后我们可以用哈希表来进行添加键就是key,值就是你遍历的那个,然后定义 vector<vector<string>>的数组,对哈希表进行遍历,加上键值对中的相关值,返回数组就行了。

2025-11-17 20:37:14 263

原创 力扣题739每日温度和496下一个更大的元素以及关于栈的思想运用

首先说栈,栈是一个先进后出的数据结构,我们可以利用栈来构建单调栈,顾名思义就是单调递增或者递减的意思。

2025-11-16 19:15:50 302

原创 QT问题解决day2:刷新好友列表

在运行之后我发现了只有666打印了,后面的东西没有打印,也就是说这个nameList里面根本没有存东西进去或者说这个循环根本没有发生,在我对其进行调式之后发现了iSize这个参数为0。最后发现是sql语句的问题解决就行了。

2025-11-16 13:52:35 177

原创 QT问题:day2 刷新列表没有反应,刷新的列表好友是同一个

在创造了相关的刷新好友的功能后我发现我点击刷新好友的功能没有用,列表框里面还是空的:这是问题。

2025-11-15 16:36:57 204

原创 QT问题解决day1:对于不更新数据库以及不显示用户名的解决方式

第一个caData是空的,偏移32位后的是我们需要添加好友的名称,所以我们在之前的代码中访问pdu->caData时加上32位偏移量就可以正常访问了,但是第一个为什么是空?在这这里我发现我是单例读取登录名出了问题,于是要找赋值这个登录名出问题了,我最后发现是在我的客户端登录函数中没有给登录名这个成员变量赋值,所以就是没有东西。我在addFriendResend(这个函数用于弹出是否添加好友的)里面加了个caName的打印发现根本没有输出,包括pdu的caData也根本没有读取。

2025-11-15 16:34:22 328

原创 QT相关的问题记录day1:添加好友问题记录

我觉得我在写项目的时候会遇见相关的问题所以我还是要记录一下,我解决这个问题写另外一个,方便我以后的学习。这次问题在于弹窗中用户名没有显示出来。如图,相关的这个代码也放出来。这是Server的相关输出。

2025-11-12 20:18:36 136

原创 哈希表的复习

哈希表是由键值对构造的,哈希表相对于数组的优势在于:数组需要一个个遍历,因为索引是连续的整数,而哈希表我们的键可以是任何类型,哈希函数会把它们"翻译"成数组的索引这样可以借用数组的高效访问来存储键值对。首先明白的是哈希表的本来是用于存储键值对的基本数据结构,在c++中哈希表使用“哈希函数”来计算数组的索引,进而存取数组中对应索引的位置的值,计算索引的过程被称为哈希。4.均匀性:类似的输入,通过打乱,然后得到均匀。键:可以看成是数组的下标,但是键可以是任意类型的,也不一定是连续的,但是键一定是唯一的。

2025-11-12 20:05:45 398

原创 QT项目做添加好友功能的相关知识点

我们用socket发送PDU请求给服务器,但是服务器返回的却不是原本的客户端而是新的客户端,返回原来的客户端蛮简单的用之前的socket就行了,但是发送的客户端2的socket不是客户端1发送给服务器的socket,所以我们要利用发送请求的信息进行查找,然后用对应的socket的发送给另一个客户端。其中在这个函数里面我们要接受两个用户名cur和tur,此时我们创建char类型的变量用于接受,用memcpy函数来接受,定义一个int类型的ret,用来记录处理我们查找tur用户的不同情况。

2025-11-10 19:16:25 252

原创 160力扣相交链表的正确解法

当然也有不相遇的情况,就是二者没有交点,这样就直接返回nullptr就行了,主要是讨论为什么会在相加节点相遇以及为什么会相遇这里用数学的方式好一点理解,我们设公共节点个数为c个,A的节点个数为a个,B的节点个数为b个,如果a!因为有事所以昨天写的内容搁到今天写了,不过无伤大雅,首先我们先说说换思路是怎么做吧,这个题目时要用双指针来进行解决,我是这么想的,p1遍历A链表,p2遍历B链表,如果遍历到最后一个还没有遇到就直接p1=headB,p2=headA相互遍历,这样相遇就是两个链表的相交的节点,为什么呢?

2025-11-08 15:57:02 198

原创 力扣160相交链表错误解法思考

其实这个题目一开始看还看的有的怪,理一理大概就是说两个链表会有一个公共节点,在公共节点之后会合并成一个链表,要求返回那个公共节点的值,其实这个题目我受之前那个检测是否链表循环的启发,想到了一个做法,我先把第一个链表遍历,把值设置为-1因为题目给了val大于0,然后一直遍历,这样链表一在合并前和合并后的值都是-1,此时我们遍历链表二,加上一个判等,如果链表二val等于-1就说明这个节点是公共节点return这个节点就行了,但是我运行完发现了一个问题那就是返回的值是-1。

2025-11-06 23:45:03 318 1

原创 递归的思路来解决 力扣206反转链表

这里也把代码给一下好理解,首先是递归终止的条件,肯定是head->next==NULL,你加个head==NULL来判断也没有问题,因为链表可能为空,然后就是。

2025-11-05 21:15:39 355

原创 运用递归来解决删除指定链表节点

解释一下过程,递归是倒着来的,我们可以举例子来理解递归的实现逻辑:1,3,6,3 ,假设6是目标值从3开始进行递归中的“归”,先是3不是val目标值,则返回3,再就是3前面的6,6是目标值,这时候返回6的下一节点即3,这样6这个节点被删除了返回的是6的下一个节点3,同样,如果目标值为尾节点3,这个例子中的3就会返回下一个节点即NULL,继续递归,6不是目标值那么返回的就是6但是6的下一个节点变了是NULL不是3了。

2025-11-05 00:11:09 169 1

原创 双指针的运用(力扣876找链表中间)

在找中间值时,一般的思想是直接遍历整个链表然后再进行计数,最后除以2来确定中间值,然后为了使得找到中间的节点还要再一次的进行遍历,这样子太麻烦了,所以我们可以用双指针的方法来解决相关的问题:在这个图中我用f1表示第一次运行,f2是第二次,s1是第一次,s2是第二次,此时我们让快指针移动两步,慢指针移动一步,直到fast->next==NULL为止进行循环运算,不过我们要注意的是fast移动两步时,可能会越界,所以我们要在第一次fast=fast->next和第二次fast=fast->next时判断一下(这

2025-11-03 22:15:17 143

原创 贪心算法的学习

今天在做力扣的题目,121题求股票那个我本来用的是先遍历最大值,在最大值那里定义指针前后遍历,寻找股票利润最大值,但是这样面临着一个问题,我一开始没有想到,就是在找到最大的值之后,比如具体一点3,5,2,1,你会发现这里算不出,然后我就想不出,后面学习了贪心算法,才明白要怎么做。然后再对于股票的问题,为什么可以用贪心算法呢?,主要的原因是因为这个题目符合贪心算法,它不需要考虑未来,因为你买股票后不需要考虑前面的天数,总的来说就是满足局部最优满足全局最优的的条件我们就可以用了,

2025-11-03 00:11:30 123

空空如也

空空如也

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

TA关注的人

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