自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 QT教程:repaint()和updata()的区别

在 Qt 中,repaint() 和 update() 都是用于控件的函数,但它们的工作机制和使用场景有所不同。让我们来看看这两个函数的区别。

2024-09-07 14:18:26 932

原创 QT教程:QTime和QTimer的使用场景

QTime:1.用于表示时间和处理时间计算。它不用于定时操作,而是更适合用于计算两个时间点之间的时间差,或者获取当前时间。QTimer:2.用于定时操作,可以设置每隔一定时间触发任务。它适合用在需要定期执行某些任务的场景中,如 GUI 应用的动画、定时更新等。

2024-09-06 10:59:59 1117

原创 QT教程:start()和startTimer()的区别

1. start()QTimer:适用于典型的定时任务,利用信号与槽机制进行处理。它适合在 GUI 应用中使用,能够方便地每隔一段时间执行某个任务,并且可以轻松管理和停止定时器。QObject:适用于需要更低级别定时器控制的场景,必须手动处理定时器事件(timerEvent()),并手动停止定时器(killTimer())。适合需要更高性能或更细粒度控制的任务。

2024-09-05 20:57:47 1216

原创 构造函数的深浅拷贝问题详解

浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是两种不同的对象复制方式,主要区别在于它们如何处理对象内部的指针或动态分配的资源。浅拷贝:只是复制对象的各个成员的值,对于指针成员,浅拷贝只复制指针的值(即内存地址),而不复制指针所指向的内存内容。结果是多个对象共享同一块内存。深拷贝:不仅复制对象的各个成员的值,还会为指针成员分配新的内存,并复制指针指向的实际内容。结果是每个对象都有自己的一份独立的内存副本。浅拷贝:适合不涉及动态内存或资源管理的简单对象。

2024-09-04 12:01:59 1225

原创 类和对象的概述以及this指针的应用

访问控制限定符public---公有成员---谁都可以访问protected---保护成员---只有自己和子类可以访问private---私有成员---只有自己可以访问在C++中,类(class)和结构(struct)已没有本质性的差别,唯一的不同在于类的缺省访问控制属性为私有(private)结构的缺省访问控制属性为公有(public)访问控制限定符仅作用于类,而非作用于对象。对不同成员的访问控制属性加以区分,体现了C++作为面向对象程序设计语言的封装特性。

2024-09-02 18:47:01 1431

原创 内联函数与动态内存分配

1.内联会使可执行文件的体积和进程代码的内存变大,因此只有频繁调用的简单函数才适合内联2.inline关键字仅表示期望该函数被优化为内联,但是否适合内联则完全由编译器决定3.稀少被调用的复杂函数和递归函数都不适合内联。

2024-08-30 17:55:57 1073

原创 C++语法基础(一)

进程级生命周期的变量从程序开始执行(通常是在程序的初始化阶段)到程序结束时一直存在。这些变量通常分配在全局/静态数据区中,生命周期贯穿整个程序的运行过程。namespace中的变量v_tomato是具有进程级生命周期的全局变量。它从程序启动时初始化,并在程序结束时销毁。尽管被封装在namespace中,它的生命周期和其他全局变量一样,不受namespace本身的影响。

2024-08-28 20:13:14 1194

原创 linux信号处理机制基础(下)

用专门的系统命令发送信号kill [-信号] PID缺省发送SIGTERM(15)信号若不指明具体信号若要指明具体信号,可以使用信号编号,也可以使用信号名称,而且信号名称中的“SIG'前缀可以省略不写。例如kil -kill -1 (会终止当前用户下所有进程)超级用户可以发给任何进程,而普通用户只能发给自己的进程功能:向指定的进程发送信号参数:pid 可以如下取值-1 -向系统中的所有进程发送信号。

2024-08-28 00:03:02 1310

原创 Linux信号处理机制基础

无论一个进程是正常终止还是异常终止,都会通过系统内核向其父进程发送SIGCHLD(17)信号。父进程完全可以在针对SIGCHLD(17)信号的信号处理函数中,异步地回收子进程的僵尸,简洁而又高效。由于父子进程共用终端设备我们需要在vi上进行,开启两个窗口,向子进程发送2号和3号信号。返回值:成功返回原信号处理方式,如果之前未处理过则返回NULL,失败返回SIG_ERR。SIG_IGN -忽略。handler 信号的处理方式,可以如下取值。功能:设置调用进程针对特定信号的处理方式。

2024-08-27 17:00:04 1086

原创 创建新进程,system函数及其底层逻辑

与fork不同,不是创建调用进程的子进程,而是创建一个新的进程取代调用进程自身。新进程会用自己的全部地址空间,覆盖调用进程的地址空间但进程的PID保持不变exec不是一个函数而是一堆函数(共6个),一般称为。它们的功能是一样的,用法也很相近,只是参数的形式和数量略有不同exec函数族一共包括6个函数,它们的函数名都是在exec后面加上一到两个字符后缀,不同的字符后缀代表不同的含义。

2024-08-25 18:38:50 734

原创 快速排序的改进(超详细!!!)

快速排序算法的改进,能够应对队列中的重复元素。

2024-08-16 16:55:28 639

原创 排序和查找算法

【代码】排序和查找算法。

2024-08-15 19:53:21 928

原创 有序二叉树的释放(要点剖析)

如果你尝试访问一个已经被释放的内存地址,结果是未定义行为。崩溃:访问无效内存通常会导致程序崩溃。输出随机数据:有时,已经释放的内存区域并不会立即被系统回收,你可能会看到原来的数据,但这些数据是无效的,因为内存已经不再属于你的程序。其他不可预测的行为:未定义行为意味着程序可能做任何事情,完全不受控制。

2024-08-14 08:36:35 706

原创 有序二叉树的基本操作(重难点分析)

此时我们又需要进行判断,虽然通过画图我们可以清晰地知道新节点应该挂载的位置,然而计算机并不知道新节点挂在父节点的左侧还是右侧,因此我们还要通过新节点与父节点比较大小可以确定位置。第一步:引入指针p1和p2让他们同时指向目标节点的右子树,p2先走,p1跟随p2走,当p2为空时,p1记录的是该右子树的最左侧位置,找到这个位置后我们就可以将目标节点的左子树挂在右子树的最左侧位置。第二部:比较目标节点与其父节点的大小,以确定新树挂在目标节点的父节点的哪一侧。来寻找新节点的插入位置,p1和p2起初都置于根节点,

2024-08-13 16:30:20 861

原创 有序二叉树的基本操作

一般来说,当左子树不为空时,左子树的元素值小于根节点,当右子树不为空时,右子树的元素值大于根节点,一句话,不管站在哪个节点去看,左边总是小于右边。

2024-08-13 11:09:18 995

原创 单链表与双链表的代码实现

链表的表示链表的操作链表的初始化链表的释放头部插入尾部插入顺序插入删除节点遍历链表在main.c文件调用上述链表的操作双链表双链表的概念 单链表中,每个节点中都包含指向下一个节点的指针,这也就意味着,我们在使用链表时,只能从头到尾的去找节点。 为了克服单向性的这一缺点,我们在设计链表时,可以在每个节点中再设置一个指向前面节点的指针。这样每个节点中都包含两个指针,一个指向直接后继,一个指向直接前驱。这就是

2024-08-11 20:56:21 365

原创 栈和队列的代码实现

队列也是一种数据结构,队列也可以用来存放数字每次只能向队列里加入一个数字,每次只能从队列里获得一个数字在队列中,允许插入的一端称为队尾,允许删除的一端称为队头。它按照先进先出(FIFO)的原则存储数据,先进入队列的数据先出队列。类似于火车过山洞,车头最先进入山洞,也是最先出山洞。编写队列的时候也需要提供一个函数用来向队列里加入数字,还要提供一个函数用来从队列里获得数字。

2024-08-03 23:40:38 629

原创 动态内存分配和文件操作

为了使用这些标准函数需要包含头文件----malloc函数可以动态分配一组连续的存储区----这个函数需要一个整数类型的参数表示希望分配的字节个数----它的返回值表示分配好的第一个字节的地址----如果内存分配失败就返回NULL----计算机不会主动回收动态分配的内存----当程序不再需要动态分配内存以后就应该主动把它们还给计算机,否则会造成内存泄露----free函数用来把动态分配内存还给计算机,这叫做释放动态分配内存----这个函数需要第一个字节的地址作为参数。

2024-07-29 10:44:08 1116

原创 高级指针(超详细!!!)

首先需要定义一个函数指针类型,这个类型应该与回调函数的原型相匹配。

2024-07-27 13:52:56 672

原创 指针与字符数组使用的相关注意

数字:每个数字占用固定大小的内存块,因此可以用一维数组直接存储。字符串:每个字符串的长度可能不同,需要以空字符\0结尾来标识结束。为存储多个字符串,可以使用二维字符数组(每个字符串占用固定大小的字符数组)或字符指针数组(每个指针指向一个字符串常量)。使用%s格式说明符时,printf会将参数解释为字符指针,并打印该指针指向的字符串。直接使用arr[0]作为printf的参数是有效的,因为arr[0]本身就是一个字符指针。如果你解引用arr[0],得到的是该指针指向的第一个字符。

2024-07-14 20:38:03 1008

原创 指针数组与数组指针(超详细!!!)

指针数组是一个数组,其中每个元素都是一个指针。指针数组可以用于存储指向不同数据类型的指针,例如字符、整数或结构体等。int *p[n];//定义了一个指针数组,数组大小为n,数组中的每个元素都是一个int*指针。

2024-07-04 20:57:19 1037

原创 strcpy函数使用易错点!!!

对于strcpy函数的第一个形参(输出型形参)因此只能是数组名,而不能是指针变量对strcpy的第二个形参(输入型形参)可以是数组名或者是指针变量。

2024-07-02 20:58:43 338

空空如也

空空如也

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

TA关注的人

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