自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [QT]记事本项目(信号槽,QT基础控件,QT文件操作,QT关键类,对话框,事件)

头文件。

2024-09-09 16:02:41 623

原创 [QT] QT事件与事件重写

如下,自定义按钮类。通过重写部分事件实现部分功能头文件源文件在ui文件中将widget提升为自定义的mybutton类后,即可使用自定义控件先前提到,信号槽机制,其实是一种事件处理的集成,因为先前对于MousePressEvent进行了重写,所以直接使用clicked信号会与按下事件产生冲突,所以此信号槽函数失效为了正常使用此功能,需要在对MousePressEvent事件的处理函数中手动添加emit click()

2024-09-07 15:47:24 431

原创 【QT】文件读写,文件对话框

为按钮设置信号槽,左一按钮为打开文件,左二按钮为保存文件。利用QFileDialog选择文件,再利用QFile类打开文件,最后使用QTextStream读取和写入文件。实现功能。//文件内容显示到编辑栏中//编辑后的内容保存到文件QString strsave = QFileDialog::getOpenFileName(this,"保存文件","C:\\Users\\SlanderMC\\Desktop");

2024-09-05 15:20:46 382

原创 QT信号和槽

Qt信号和槽机制提供了允许我们自己设计自己的信号和槽。emit函数用来发送信号自定义信号使用条件声明在类的signals域下没有返回值,void类型的函数只有函数声明,没有定义可以有参数,可以重载自定义槽函数使用条件qt4 slots域下面,qt5之后可以声明public下,同时还可以是静态的成员函数,全局函数,lambda表达式没有返回值,void类型的函数不仅有声明,还得要有实现可以有参数,可以重载。

2024-09-03 19:55:51 509

原创 QT基础控件和对象树机制

所有QT中的类几乎都是QObject的派生类,QObject是以对象树机制来组建起来的,在创建一个对象时,可以通过parent指针为其提供一个其父对象,我们创建的这个对象会自动添加到其父对象的 children()列表。当创建的对象在堆区时候,如果指定的父对象是QObject派生的类,可以不用管理释放的操作,将对象会放入到对象树中。父对象析构时,会检查是否还有它的子类存在,如果存在,则先去析构子类对象,然后再调用父对象析构,设置父亲:setParent(“”) —传入指针,将按钮加入到目标窗体中。

2024-08-11 18:23:24 259

原创 [Linux系统编程]进程组和会话,守护进程

Daemon(精灵)进程,是 Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。3.通常根据需要,改变工作目录位置 chdir(“path”)—这是因为进程运行在后台,需要将进程工作目录迁移到一个不可被移除的目录下,防止出错。上文讲当一个进程创建会话后,会舍弃当前终端,到后台运行,可以作为守护进程,周期性的等待某种操作。6.建立新会话时,先调用 fork,父进程终止后,子进程调用setsid(),创建会话。1.创建会话的进程不能是进程组组长,创建后该进程变成。

2024-07-06 23:36:28 391

原创 [Linux系统编程]进程间通信---信号

Unix早期版本就提供了信号机制,但不可靠,信号可能丢失。Berkeley和AT&T都对信号模型做了更改,增加了可靠信号机制。硬件异常产生:如:非法访问内存(段错误)、除0(浮点数例外)、内存对齐出错(总线错误)A给B发送信号,B收到信号前在执行自己的代码,收到信号后,不管执行到程序的什么位置,进程控制块PCB,除了包含进程Pid,进程状态,进程工作目录,用户 id,组id,,Linux/UNIX 环境下,古老、经典的通信方式,现下依然是主要的通信手段。文件描述符表等,还应该包含了信号相关的信息,主要指。

2024-06-29 18:10:28 983

原创 [Linux系统编程]进程间通信---管道/FIFO/存储映射IO(MMAP)

在进程间完成数据传递需要借助操作系统提供特殊的方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。随着计算机的蓬勃发展,一些方法由于自身设计缺陷被淘汰或者弃用。现今常用的。

2024-06-17 17:41:40 957

原创 [Linux系统编程]进程,父子进程,进程操作函数

各个进程有自己的虚拟内存空间,分为用户区和内核区,要运行进程,必须要将数据加载到内存中,这个映射的关系由CPU中的MMU来执行,对于用户区的数据,MMU将其映射到不同的内存区域,各自独立;而对于内核区的数据,例如PCB,MMU会将其映射至同一块内存空间。MMU会将内存分级,0级的内存空间对应内核区,会将内核区的数据映射在这里,而3级对于用户区。程序:不占用内存,未运行,只是二进制可执行文件,相当于。那么MMU是怎么划分内存,实现不同区域的映射的?进程:运行起来的程序,占用内存,相当于。

2024-06-06 20:55:26 825

原创 [Linux系统编程]目录操作函数,实现递归遍历目录

思路:传入一个目录,将其opendir打开获取DIR*,通过readdir依次获取内部文件,对于每一个文件,通过stat函数获取文件信息,检查其stat结构体中的st_mode属性,如果是文件,直接打印输出,如果是目录,则将该目录名作为参数,递归执行遍历函数。通过传入DIR*,对一个目录进行读取,每次返回一个dirent*,指向一个文件。需要注意的是,文件需要使用绝对路径,因为工作目录固定,在对其它目录操作时,相对路径找不到指定文件,所以在递归之前,需要拼接文件路径。如下,一个dirent结构体内部实现。

2024-06-06 20:27:41 545

原创 [Linux系统编程]文件重定向dup和dup2

操作系统在管理文件时,会管理一张文件描述符表,根据打开的文件,分配一个文件描述符(int),根据该文件描述符,锁定指向该文件的指针,从而索取文件。在linux中,可以使用**> 和 >>命令**来实现重定向,将控制台内容输入到文件中,它的具体实现就是dup函数。重定向的原理就是将一个文件描述符的指针重新定位,不再指向它原本的指针,而是重定位到另一个文件。通过重定向操作后,对进行重定向的这个文件描述符进行的操作,就成为了对它重定向的那个文件的操作。,以文件描述符为参数,返回被重定向的那个文件描述符。

2024-06-04 18:16:23 531

原创 [Linux系统编程]目录操作函数

一个dirent结构体中包含d_ino(inode编号),d_name(文件名)等内容。与文件关闭不同,关闭目录流用的是closedir(DIR* );reddir函数用于读取目录,每次读取一个目录项,返回一个。通过以opendir返回的DIR指针做参数,关闭目录流。目录也是一种文件,它存放其下的目录项。用于打开一个目录,返回一个。

2024-06-03 23:30:50 180

原创 [Linux系统编程]文件IO

但是库函数fputc开的缓冲区较大(默认4096字节),先在用户区中预读入,然后再一次性执行系统调用,就避免了大量的时间开销,所以,虽然每次都是读入一个字节,底层实现原理是。一个进程在内存中有自己的内存地址空间,其中,PCB(进程控制块)被存放在内存中,用来管理该进程,PCB本质上是一种数据结构,维护着进程的一些信息,其中就包含了文件描述符表。所以,若设置系统调用write/read的自定义缓冲区为1个字节,那么每读入一个字节,就要执行一次从用户区到内核区的跳转,时间开销大。

2024-05-31 19:09:13 630

原创 [Linux系统编程]gdb调试及makefile管理

一.gdb

2024-05-30 16:08:24 558

原创 [Linux系统编程] 静态库与动态库

在头文件中,要包含一个头文件守卫,防止重定义。

2024-05-29 18:38:58 536

原创 [Linux]服务管理

systemd是目前Linux系统上主要的系统守护进程管理工具,在开机后,首先执行systemd服务(其它进程的根源),然后根据当前系统的运行级别,选择对应的服务启动。是运行在后台的,通常都会监听某个端口,等待其它程序的请求 -------比如mysqld,防火墙等,因此我们又称为守护进程,是Linux中非常重要的知识点。systemctl status [服务名] --------是查看某个服务的当前状态。-------它管理/etc/init.d目录下的服务的自启动状态。

2024-05-25 11:02:31 1087 1

原创 [Linux]进程与进程管理

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。杀死进程也支持通配符,这在系统因负载过大而变得很慢 时很有用) -------使用killall杀死进程时,它的子进程也会被终止。kill -9 进程号 --------------"-9"选项可以强制杀死一个进程。若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。以ps -ef的方式查看进程,可以看到全格式的进程信息,包含父进程信息。查看进程还有一个更简便的方式-------pstree,进程树。

2024-05-24 17:50:13 429

原创 [Linux]网络原理与配置

虚拟系统的IP地址处于随机网段,同时在母机上会额外有一个与虚拟IP地址网段相同的IP地址,可以实现母机与虚拟机的通信。虚拟系统的IP地址可以通过主机实际的IP地址作为代理IP,与外部系统进行通信。自动分配会自动分配一个未被使用的端口,避免ip冲突,但是缺点也很明显,每次连接ip都不同,极不方便。启动linux系统时,IP地址随机分配,但其实可以通过网络配置操作指定系统的ip地址,见下。缺点:只能从虚拟系统到外部系统进行单向通信,而外部系统无法寻找虚拟系统进行通信。2.如何通过主机名,映射到ip地址。

2024-05-22 18:57:40 507

原创 [Linux]磁盘管理

需要注意的是,使用命令行工具实现的挂载,在系统重启后会失效,这是因为系统在每次启动时,都会去检查 /etc目录下的 fstab文件,该文件是一个表,存放着磁盘分区的挂载信息,要实现永久挂载,需要修改该文件。mount指令 mount /dev/[分区目录] [挂载目录] ------------表示将某分区挂载到某个目录。du -h [目录] ------查看某个目录的磁盘使用情况(不包括文件)访问目录,相当于访问某块分区。df -h -------查看系统整体磁盘使用容量。

2024-05-21 16:40:00 945 1

原创 [Linux]Crond任务调度以及at任务调度

其中’/’ 后的每一个’*'都表示一个占位符,具体如下所示,默认情况下星号表示不指定。例子: */0 12 * * * ls -l >>/tmp/mydata。crontab -e 进入编辑页面,设定任务。* * * * * [具体任务]crontab -l 查看已有定时任务。crontab -r 删除所有任务。编辑时,需要指定间隔时间。

2024-05-20 09:38:37 274

原创 [Linux]组管理和权限管理

LInux系统中每一个用户都必须属于一个组,创建新用户时,可以指定组,如不指定,则默认创建一个与用户名相同的组。如下,用户zwj创建了x.txt文件,该文件属于zwj所在的组"wudang"发现文件x.txt的所在组跟随用户的组更改变,变为"mojiao"组。更改用户zwj的组从"wudang"到"mojiao"useradd -g 组名 用户名。usermod 组名 用户名。的所在组,默认一个文件属于。groupadd [组名]chgrp 组名 文件名。创建用户,并且指定组。

2024-05-17 18:02:18 233

原创 [Linux]常用基础命令(3)------日期指令,查找指令,压缩解压指令

locate相比find更快,find指令查找时从给定目录逐次向下检索,而locate指令做了优化,无需遍历整个目录结构,管道命令可以使用 符号"|" 搭配cat 使用,类似于more 和 less ,也可以单独使用。tar打包后的文件为tar.gz文件。还可以通过date指令修改系统时间。可以打印出某年全部月份的日历。,默认打印当前月份的日历。locate 文件名。

2024-05-16 10:50:00 256

原创 [Linux]常用基础命令(2)--------文件目录指令

more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。对于比较大的文件,直接全部加载会占用很大内存,而使用less打开文件时,会根据显示要求,动态得将数据加载至内存,提高效率。如果第二个参数为其其他路径的文件,则作用为移动文件(类似cut剪切)与cat使用:cat -n /etc/profile | more。—能够实时追踪文件追加的内容(实践中常用)**>>:**追加内容到文件结尾。----可以指定显示前n行的内容。----指定查看后n行的内容。

2024-05-11 17:57:30 427 1

原创 [Linux]常用基础命令(1)------运行级别以及单用户模式找回密码

1.在linux启动界面输入e进入如下界面,找到以UTF-8结尾的字段。4.在新的一行输入passwd 并输入密码,然后再次确认。,输入回车后,系统运行完毕后自动重启,密码修改完成。下图,分别表示级别3和级别5。2.在UTF-8后输入“CentOS7中,使用。,即更改为运行级别3。

2024-05-11 14:16:16 334 1

原创 [Linux]用户管理

(必须加用户名,否则默认设置当前用户密码)各用户的信息都加密处理后表示。

2024-05-10 15:01:55 665

原创 [Linux]关机/重启指令与用户登录注销

使用xshell时,远程连接Linux,可以使用su - 用户名来切换用户(shell页面和终端都可以使用)logout为注销当前用户,无法在终端使用,只可以在xshell使用。sync:内存数据写入磁盘,立即执行。

2024-05-10 13:31:14 172

原创 [Linux学习笔记]vi/vim常用快捷指令

命令行模式下(一般模式下:进入),输入/关键字 可以查找内容,输入n可移动光标至下一个关键字。命令行模式下,输入/set nu设置行号,/set nonu 取消设置。一般模式下,使用 yy复制 使用p粘贴 几行可以写几yy。一般模式下 大写G 跳转至末尾 ,小写gg跳转至首行。一般模式下,先输入跳转至的行数,再shift+g跳转。一般模式下,使用u撤回上次操作。一般模式下,使用dd删除。

2024-04-30 11:41:09 94

原创 Linux网络连接的三种方式

虚拟系统(以Linux为例)的IP地址与母机系统处于同一网段。由于处于同一网段,虚拟系统可以和处于同网段的外部系统通讯。缺点:同一个网段最多255个IP地址,多人使用桥接系统配置虚拟系统时,容易造成IP地址的冲突。

2024-04-29 15:46:36 409

原创 [C++]虚析构函数

虚函数对应一个虚表vtable,这个vtable存储在对象的内存空间中,虚函数被通过查询虚表vtable调用,所以一定要通过构造函数实例化内存空间,才会有虚表,所以构造函数不可能为虚函数。,此时就用到了虚析构函数,与普通虚函数不同,它并非直接查找子类中的函数覆盖自身,而是同时调用自身析构函数与子类构造函数,这样就解决了利用多态时可能造成内存泄漏的问题。虚函数(virtual)用在类中的普通方法中的时候,会根据虚表(vtable)查找派生类中对于当前函数名的用法,虚函数可以用于实现多态,而。

2024-04-27 14:49:36 280

原创 [C++] 类型双关与联合体

注意:由于union里面的变量会只会占有同一个内存,所以不能直接把float x, y, z, w和Vecotr a, b写在union里面,这样就变成6个变量共享内存了。所以我访问Vecotr4的时候为了提高访问效率,可以一次访问两个数,即把他们分成x,y和z,w两组来访问,每一组都可以看成是一个Vecotr2的类型。上述结果a,b共享内存,为a赋值相当于同时为a,b赋值,但设置类型不一,在输出时a输出正常结果,而b无法解释float类型,打印出错。这就是类型双关,这样访问这个doule值是错误的,

2024-04-27 14:11:23 456

原创 [C++]内存分配以及堆/栈讲解

C++程序正式运行时,操作系统分配一部分内存空间,并分为以下几块分区:1、栈: 自动分配释放 ,存放变量的值,函数等,栈区是一部分连续的内存空间,空间很小,一般为2M。2、堆 : 由程序员分配管理,是不连续的内存区域,内存空间较大。3、全局区和静态区:定义在全局作用域上的变量与静态变量一起存放在此区域,由操作系统在程序结束时回收4、程序代码区:存放二进制代码。

2024-04-19 16:20:27 745

原创 [C++模板]函数模板与类模板

模板是一种参数化的多态性工具,对于不同数据类型执行相同操作时,模板提供了更贱简化的方式,不必多次重写代码,减少代码复用。采用模板,可以为逻辑功能相同而数据类型不同的程序提供共享的代码。模板函数的使用:如上,给出的参数数据类型为T,在模板函数中,既可以显式的给出数据类型,也可以隐式推导数据类型。如函数模板一样,类模板是参数化的类,即用于实现数据类型参数化的类。可以根据给出的数据类型创建实际类。定义模板函数的方法,可以具有多个参数。(typename也可以写为class,意思相同)

2024-04-19 14:28:32 291

原创 [c++]vector数组的原理及使用时的优化

vector是一种动态数组,采用连续空间来存储元素。这个过程需要进行元素的复制,需要时间开销。所以vector在每次需要分配内存空间时,不会只分配正好的内存空间,而是额外分配一部分,这样就减少了复制的次数,节省开销。

2024-04-18 11:40:05 320 1

原创 C++类的拷贝构造及深浅拷贝问题

它的特点是只是将变量的值复制一份,然后赋值到当前实例化类的变量中,而不考虑指针变量。如果类中有指针变量,且进行了浅拷贝,那么会有多个类的指针指向同一块内存空间,导致对类的操作出现严重错误。重载拷贝构造函数,对指针变量做处理,为其开辟大小相同的内存,这次拷贝赋值的不是地址,而是将原本地址中的值复制一份,赋值给新开辟的内存空间。C++类会提供一个默认拷贝构造函数,其做的操作是将另一个实例化类的引用传入,将数据复制,然后传入当前实例化类,可以对拷贝构造函数进行重载,这涉及到深浅拷贝的问题。

2024-04-17 18:46:24 374 1

原创 C++智能指针的概念及用法(unique_ptr/shared_ptr/weak_ptr)

举个例子:两个unique_ptr维护同一部分内存,其中一个unique_ptr出作用域被自动删除,内存被释放,而此时另一个unique_ptr指向的还是那部分内存,即其指向了一部分不可用的内存区域,会导致野指针的出现。unique_ptr是不可以被共享的智能指针,意思是一旦一个unique_ptr被创建,它不能赋值给另一个unique_ptr,因为在其底层把删除了拷贝构造函数,这么做的目的是防止出现野指针,提高安全性。由于make_shared效率更快,且安全性更高,实际使用建议用此方法。

2024-04-17 17:24:26 403 1

原创 AcWing 4959 岛屿个数

(xk−1,yk−1),其中 (x(i+1)%k,y(i+1)%k) 是由 (xi,yi) 通过上/下/左/右移动一次得来的 (0≤i≤k−1),此时这 k个格子就构成了一个 “环”。小蓝得到了一副大小为 M×N的格子地图,可以将其视作一个只包含字符 0(代表海水)和 1(代表陆地)的二维数组,地图之外可以视作全部是海水,每个岛屿由在上/下/左/右四个方向上相邻的 1 相连接而形成。若 B是 A 的子岛屿,C 又是 B 的子岛屿,那 C 也是 A的子岛屿。--ACwing题解 by 煜.

2024-04-09 18:19:09 151

原创 飞机降落--dfs

【代码】飞机降落--dfs。

2024-04-08 17:22:04 172 1

原创 完全背包/01背包的基础思路与优化

用空格隔开,分别表示物品种数和背包容积。接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i种物品的体积和价值。该方案表示为max (dp[i-1][j] , dp[i-1][j-w[i]]+v[i] , dp[i-1][j-2。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。有 N 种物品和一个容量是 V的背包,每种物品都有无限件可用。第 i种物品的体积是 vi,价值是 wi。输出一个整数,表示最大价值。第一行两个整数,N,V。

2024-04-02 12:28:06 203 1

原创 李白打酒加强版(dfs暴力枚举+dp)

话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒 2斗。这一路上,他一共遇到店 N次,遇到花 M次。已知最后一次遇到的是花,他正好把酒喝光了。请你计算李白这一路遇到店和花的顺序,有多少种不同的可能?注意:壶里没酒 (0斗) 时遇店是合法的,加倍后还是没酒;但是没酒时遇花是不合法的。第一行包含两个整数 N和 M。输出一个整数表示答案。由于答案可能很大,输出模 1000000007的结果。对于 40%的评测用例:1≤N,M≤10。

2024-04-01 18:00:54 482 4

原创 C++static关键字不同的用法

但使用static修饰类的变量,那么这个变量实际上不属于类的一部分,它只是声明在当前这个类名的命名空间之内的变量,使用这个类创建的任何对象对该静态变量都共享同一块内存,也就是说,任何一个实例化对象对这个变量进行修改,当其它的实例化对象访问该变量时,访问的是已经修改了的值。下次再用函数时重新创建。而该变量的作用域仍然只是该函数体之内。当以某类实例化对象时,该对象具有的函数可以直接访问该对象的变量,但是使用static修饰函数名后,所做的与static修饰类内变量相似,该方法不存在类的实例化对象当中。

2024-03-31 17:45:23 275 1

空空如也

空空如也

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

TA关注的人

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