- 博客(114)
- 收藏
- 关注
原创 【Qt】信号和槽
我们自己实现一个槽函数,然后调用它。与自定义一个成员函数是一样的。别忘记声明该函数button->setText("按钮");delete ui;// 按下按钮,修改窗口标题this->setWindowTitle("按钮已经按下");this->setWindowTitle("按钮已经按下");运行,最终的效果与前面一样这种方式不需要手动connect,因为Qt内部已经帮我们处理好了Qt中也是允许自定义信号的,在开发中,大部分情况是要自定义槽函数,来进行业务逻辑。
2025-04-20 19:31:16
1242
2
原创 【Qt】初识Qt(二)
刚刚我们写了hello world的内容,ui文件就会在xml中多出来一段代码,qmake就会在编译项目的时候,基于这段代码生成一段C++代码,然后通过这段C++代码构建出界面内容(这是自动完成的,不需要手动)前面说通过new更好,是为了把这个对象的生命周期交给Qt的对象树进行管理,如果是栈就不行了,可能存在提起释放问题(出了作用域对象就销毁了,导致最后要显示的内容没有显示出来)上面的代码有一些“问题”,在C++中,我们写代码new出来的对象最后都要释放,否则会内存泄漏,可是这里的代码并没有显示去释放它。
2025-04-18 13:26:37
1060
原创 【Qt】初识Qt(一)
ui文件的格式是xml,Qt中使用xml文件来描述程序的界面是什么样的,同时qmake工具会调用相关的工具,依据这个xml文件生成一些代码,从而把完整的界面构造出来。.pro文件类似与Linux中的makefile文件,只是Qt中的“makefile”文件不需要我们自己写,而是qmake自动生成。这段代码用来描述当前项目中参与构建的文件有哪些(编译器需要编译哪些文件,不需要我们手动修改).pro文件是Qt项目的工程文件,也是qmake工具构建时的重要依据。GUI:基于图形操作,门槛低,效率低。
2025-04-17 19:51:53
1029
原创 【刷题27】动态规划—斐波那契数列模型
状态转移方程:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);初始化:i从2开始,因为要保证i-1和i-2不越界。dp[0]和dp[1]初始化为0,cost数组才是表示每条台阶有费用的。因为是每次向上爬一个或两个台阶,所以可以理解为本次花费为前一个台阶的花费与前两个花费的较小值。注意:楼顶——状态表示数组的最后一个位置不是cost数组的最后一个位置,要多加一个。返回值是楼顶位置,此时就是花费最小。
2025-01-19 22:59:53
430
原创 【刷题25】深搜——递归专题
注意:newhead其实指向的是val为2的节点2,图的意思是表示newhead在val为1的节点这层。注意:为啥是push_back。
2025-01-13 22:33:43
397
原创 5种IO模型
Input(输入)和Output(输出)。冯诺依曼体系结构中,数据从输入设备拷贝到内存,经过处理后,再从内存拷贝到输出设备。现实情况中,数据并不是那么流畅的进行拷贝操作,而是会进行“等”。比如系统调用recv,当读取条件不满足时,它就会阻塞,当读取条件满足了,拷贝数据并返回结果。所以总结一下,recv一共就做了两件事:等+拷贝 => IO=等+拷贝其他系统调用也是一样,比如send,当发送缓冲区满了,就会阻塞,直到有空间腾出来,才能进行发送数据。
2025-01-11 23:11:28
833
原创 HTTPS
https也是一个应用层协议,在 HTTP 协议的基础上引入了一个加密层数据摘要(也可以叫数据指纹)的原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定长度的数字摘要。数字摘要并不是一种加密机制,但可以用来判断数据有没有被篡改。
2024-12-28 15:56:58
1235
6
原创 cookie和session
HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等。
2024-12-25 20:44:45
687
原创 【刷题24】BFS解决拓扑排序
有方向,没有环的图结构入度与出度针对一个顶点来说的入度:有多少的箭头指向该顶点出度:该顶点有多少箭头指向其他顶点。
2024-12-24 21:24:58
327
原创 进程间关系与守护进程
作业是针对用户来讲,用户完成某项任务而启动的进程,一个作业既可以只包含一个进程,也可以包含多个进程,进程之间互相协作完成任务, 通常是一个进程管道。
2024-12-13 20:47:21
1041
5
原创 【刷题22】BFS解决最短路问题
思路:BFS+哈希表 找最短路径。如图:从A到I,怎样走路径最短。思路:BFS+哈希表。思路:BFS+哈希表。思路:BFS+哈希表。
2024-12-12 20:09:17
1215
3
原创 【刷题20】优先级队列(堆)专题
题目:建大堆如果堆不为空,取堆顶最大的两个元素,相减取绝对值再入堆如果堆里面只有一个元素,直接返回这个元素堆为空,循环结束,返回0public:// 默认是大堆while(!qp.pop();qp.pop();qp.push(k);return 0;
2024-11-18 12:43:56
380
原创 【刷题19】队列+bfs专题
思路:队列+bfs – 与上题大体相同(当前节点的孩子节点入队列不同)思路:队列+bfs(具体看注释)思路:用数组模拟队列。
2024-11-14 16:10:20
428
原创 【刷题14】哈希表专题
j = 0 会不会与找到的元素位置下标刚好为0(第一个元素)冲突?因为能到这步的前提肯定是中间的某个元素与第一个元素相加等于target;既然如此,那么遍历到这个中间某个元素是不是之间就已经遍历过第一个元素了,既然刚开始就是第一个元素,那么为什么不这时候找k值呢?k值不就是这个中间的某个元素吗,然后j肯定不是0,并且i不等于j,直接返回就结束了。哈希表统计每个元素出现的个数,大于等于2就返回true,如果没有返回false。哈希表<字符串,字符串数组>思路:哈希表<元素,下标>哈希表<元素,下标>
2024-11-03 19:31:26
456
原创 【刷题12】分治—归并排序
假如内循环是正常走完的,不是break跳出来的,那么根据前面说的,begin1>end1结束,所以内循环结束的下面理所应当要有一个break。但是假如是因为内循环的break到这里来的(ret+=后,begin1还是小于end1的),即内循环还没结束,外循环也没有,就直接跳出了,会出现各种问题。以上图为例:原数组的元素5是下标0,那么它的右侧小于它的元素个数,应该加在hash下标为0的位置上。思路:在逆序对的基础上改变应该条件:计算的是前面的元素比后面的元素的2倍大的个数。计算翻转对与合并分开写。
2024-10-21 19:42:55
1015
6
原创 【刷题11】分治—快速排序
思路:建立一个小堆,先放k个元素,然后遍历剩余的元素,只要比堆顶大就进堆,往下沉。最后的堆顶就是第k大的元素。思路:快速排序—与前面相同,最后返回前cnt个元素。思路:快速排序(三路划分)
2024-10-18 14:48:08
460
原创 【刷题9】位运算专题
题目:使用STL的排序算法进行排序,只要是重复的字符必定是挨在一起的,所以可以遍历数组,有出现连续相同的字符就是有重复的代码:解法二:数组定义一个数组,大小26初始化为0,字符串的字符相对映射填入数组中,每个位置表示出现的次数,大于1次就说明有重复代码:解法三:位运算如果字符串的长度超过26个,必定有重复的,直接返回false定义的一个整型变量bitmap,它的比特位就是位图。如果位图的某一位已经存在,就返回false,否则填入位图中。遍历整个字符串后返回true代码:三、丢失的数字题
2024-10-12 18:34:12
874
原创 【刷题7】寻找数组的中心下标、和为k的子数组、和可被k整除的子数组
除自身以外数组的乘积>根据本题变形。思路:前缀和+哈希表。思路:前缀和+哈希表。
2024-10-09 21:00:07
368
原创 【刷题6】一维前缀和、二维前缀和
四、多开一个好放数据,同时满足l、r下标刚好对应上。一、前缀和,时间复杂度O(1),快速得到区间的值。三、使用前缀和,根据题目计算出区间。二、预处理,公式——一、预处理前缀和矩阵。
2024-09-30 23:47:04
370
原创 【刷题5】在排序数组中查找元素的第一个和最后一个位置
细节2:如果找完左端没有left=nums[mid],也是直接返回-1-1。,一旦相等就会死循环。或者说left=right就终止了。细节1:如果数组没有元素,直接返回-1-1;返回begin和end,是。取中点问题:取第二种。
2024-09-27 21:14:08
408
原创 【刷题4】最小覆盖子串
返回值:定义返回值ret,在判断里面截取字符串tmp,这里需要一个临时的字符串str,每次截取后赋值给str,然后如果ret为空,str直接给ret;ret不为空,比较ret和str的长度,只有str的长度小于ret的长度,才把str赋值给ret。定义变量count,统计有效字符的个数,用法与上一篇博客的两题一样,先进窗口,再判断count++;先判断count–,再出窗口。计算两个字符串的长度,定义两个哈希表,用其中一个哈希表先统计字符串t的字符出现个数。判断条件:count == 字符串t的长度。
2024-09-26 20:49:24
375
原创 【刷题3】找到字符串中所有字母异位词、串联所有单词的子串
哈希表2统计字符串p的每个字符出现的个数,然后遍历字符串s,先进窗口,相同的映射位置,哈希表1该位置的个数<=哈希表2的个数,count++(比目标数小才要++,超过了就不需要++,有等号是因为先进窗口)。如果超过固定长度,先判断哈希表的位置,哈希表1该位置的个数<=哈希表2的个数,count- -(比目标数大去掉也无效,小于了有效数就减少,等于是因为先判断的,后面要哈希表位置要减减),然后出窗口。循环次数:是单词的个数(每个单词的个数是相同的)固定窗口大小:words的长度 * 单词长度。
2024-09-25 21:18:24
353
原创 【刷题2—滑动窗口】最大连续1的个数lll、将x减到0的最小操作数
要让操作数的次数最小,就要让等于target的子数组尽可能大,然后用滑动窗口的思路做,返回值为:如果子数组中没有和等于target就返回-1,否则返回数组长度减去len(n-len),得到最小操作数。最右边和最左边的和为x,用一个变量sum统计数组所有的元素之和,sum-x就是剩下区域的元素,这个区域是连续的,可以用滑动窗口。要考虑target是负数的情况,如果是负数,直接返回-1,因为数组的每个元素都是整数。问题转换为:找到一个最长子数组,这个数组里面0的个数不能超过k个。
2024-09-23 21:22:50
494
原创 【计算机网络】传输层协议TCP
因为在前面两次的握手中,客户端发送信息,建立连接,服务端应答,客户端收到服务端的应答,才确定之前发送的信息服务端是收到。在数据传输的时候有建立连接的报文、正常通信的报文、断开连接的报文,总之就是通信过程中会收到各种各样的报文,而TCP报文是需要类型的,所以要区分报文的类型,标志位存在的意义就是区分不同的TCP报文类型。在等待的过程中,接收端的接收缓冲区里面的数据更多交给上层处理,即接收缓冲区空间更大了,这时再应答既可以确认前面的收到的信息,又能通知发送端可以发送更大的信息,提高了发送效率。
2024-09-23 18:21:10
2116
15
原创 【刷题—双指针】复写0、三数之和、四数之和
定义两个变量cur等于0,dest等于-1,让cur去遍历数组。如果cur指向的元素是0,dest往后两步,非0,往后一步。判断dest的位置,如果大于等于n-1,就停止操作,否则cur++
2024-09-21 21:37:50
416
原创 【计算机网络】传输层协议UDP
端口号标识一个主机上进行通信的不同的应用程序。IP+端口号就能确定互联网中的唯一进程。可以,一个进程可以有多个服务,比如tcp、udp,两个分别有各自的端口号,可以找到对应的客户端。不能,因为端口号是用来确定一个主机上的唯一一个进程,如果可以被多个进程绑定,就不具有唯一性。有些服务器是非常常用的,为了使用方便,人们约定一些常用的服务器,都是用以下这些固定的端口号。:应用层给多少,UDP发送多少,既不会拆分,也不会合并。一个进程是否可以 bind 多个端口号?一个端口号是否可以被多个进程 bind?
2024-09-20 16:06:40
1199
原创 【计算机网络】应用层序列化
用户在主机A发送消息给另一个用户主机B,消息序列化后通过系统调用到发送缓冲区,然后经过网络的每个分层到另一个主机,再自底向上到接收缓冲区,然后通过系统调用到应用层,再序列化变成用户可看到的消息。注意:系统调用让数据从用户层到发送缓冲区,或者从接收缓冲区到用户层,这个过程都是拷贝。用户发送一段数据先到C缓冲区,然后通过系统调用交给操作系统的管理区,发送的数据到task_struct,根据fd在文件描述符表找到位置,再指向指定的struct file,然后把数据传输到缓冲区,缓冲区会把数据刷新到磁盘中。
2024-09-15 17:37:25
1129
原创 【计算机网络】网络基础
到了数据链路层,封装了源mac地址和目的mac地址,这两个是会变化的,当前的源mac地址是A,目的mac地址是left,路由器其中的一个子网的数据链路层。路由器知道用户A要给用户B发信息,所以路由器的另一个子网与用户B联系,对源IP和目的IP地址重新封装,源mac地址和目的mac地址就发生了变化,源mac地址是right,mac地址是B,然后交给用户B,最后逐层向上解包与分用,用户B获取信息。TCP/IP协议栈是C语言编写的,双方传输使用的是同样的数据类型,所以,经过网络,双方一定能识别对方的信息。
2024-09-11 21:00:45
1589
8
原创 【Linux操作系统】线程的互斥与同步
总之就是两个人要竞争一把锁,如果拿苹果的人竞争性更强,每次都是他申请到锁,放苹果的人就没机会放苹果了,这也导致拿苹果的人每次申请到锁后去盘子上总是没有苹果拿,但是他又一直占用锁(每次申请到锁的都是他),所以放苹果的不能申请到锁放苹果,拿苹果的在盘子上也没有苹果拿,这就导致整个过程很不合理。又来了个线程2,此时线程1切换为线程2(注意:CPU执行线程1时是可以随时被切换的),线程1要带走寄存器中的1,然后线程2把0带入到寄存器中,再与内存的数据作交换,还是0,说明锁被其他线程占用,线程2就会挂起等待。
2024-09-06 14:25:55
980
10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人