自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux多线程】

在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统进程更轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。

2024-10-07 11:17:03 595 3

原创 Linux私房菜(十)之信号

执行该信号的默认动作处理动作提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(Catch)一个信号。忽略该信号在Linux当中,我们可以通过man手册查看各个信号默认的处理动作。

2024-10-03 17:12:53 940 2

原创 【Linux私房菜(九)之进程间通信】

进程间通信简称IPC(Interprocess communication),进程间通信就是在不同进程之间传播或交换信息。管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的数据流称为一个“管道”。例如,统计我们当前使用云服务器上的登录用户个数。其中,who命令和wc命令都是两个程序,当它们运行起来后就变成了两个进程,who进程通过标准输出将数据打到“管道”当中,wc进程再通过标准输入从“管道”当中读取数据,至此便完成了数据的传输,进而完成数据的进一步加工处理。

2024-10-03 10:18:53 910 1

原创 高阶数据结构-------图

构造一个含n个顶点、不含任何边的图作为最小生成树,将图中的顶点分为两个集合,forest集合中的顶点是已经连接到最小生成树中的顶点,remain集合中的顶点是还没有连接到最小生成树中的顶点,刚开始时forest集合中只包含给定的起始顶点。每次从连接forest集合与remain集合的所有边中选出一条权值最小的边,将其加入到最小生成树中,由于选出来的边对应的两个顶点一个属于forest集合,另一个属于remain集合,因此是不会构成回路的。图由顶点和边组成,存储图本质就是将图中的顶点和边存储起来。

2024-10-02 13:35:36 1107 1

原创 【并查集】

给你一个 n × n n \times nn×n 的矩阵,其中 i s C o n n e c t e d [ i ] [ j ] = 1 isConnected[i][j]=1isConnected[i][j]=1 表示第 i ii 个城市和第 j jj 个城市直接相连,而 i s C o n n e c t e d [ i ] [ j ] = 0 isConnected[i][j]=0isConnected[i][j]=0 表示二者不直接相连。查找元素所在的集合,本质就是查找元素所在集合的根节点。

2024-09-30 00:18:32 749 1

原创 [C++11——— 包装器]

function包装器function是一种函数包装器,也叫做适配器。它可以对可调用对象进行包装,C++中的function本质就是一个类模板。Ret: 被包装的可调用对象的返回值类型。Args…: 被包装的可调用对象的形参类型。包装示例function包装器可以对可调用对象进行包装,包括函数指针(函数名)、lambda表达式、类的成员函数。//函数指针(函数名)//仿函数(函数对象)public://类成员函数class Pluspublic://静态成员函数。

2024-09-23 19:23:56 871

原创 【C++11 ——— lambda表达式】

实际当我们以[&]或[=]的方式捕获变量时,编译器也不一定会把作用域中所有的变量捕获进来,编译器可能只对lambda表达式中用到的变量进行捕获,没有必要把用不到的变量也捕获进来,这个主要看编译器的具体实现。因为lambda表达式的类型都是不同的,这也就是lambda表达式之间不能相互赋值的原因,我们可以通过typeid(变量名).name()的方式来获取lambda表达式的类型。可以看到,就算是两个一模一样的lambda表达式,它们的类型都是不同的。现在要对若干商品分别按照价格和数量进行升序、降序排序。

2024-09-23 17:35:02 935

原创 【可变模板参数】

函数的可变参数模板定义方式如下:返回类型 函数名(Args… args)//函数体{}模板参数Args前面有省略号,代表它是一个可变模板参数,我们把带省略号的参数称为参数包,参数包里面可以包含0到N ( N ≥ 0 ) N(N\geq 0)N(N≥0)个模板参数,而args则是一个函数形参参数包。模板参数包Args和函数形参参数包args的名字可以任意指定,并不是说必须叫做Args和args。现在调用ShowList函数时就可以传入任意多个参数了,并且这些参数可以是不同类型的。

2024-09-21 00:41:58 826

原创 【C++11------类的新功能】

上述代码中用一个右值去构造s2对象,但由于Person类中没有生成默认的移动构造函数,因此这里会用Person的拷贝构造函数(拷贝构造即能接收左值也能接收右值),这时在Person的拷贝构造函数中,就会调用string的拷贝构造函数对name成员进行深拷贝。如果要让Person类生成默认的移动构造函数,就必须将Person类中的拷贝构造、拷贝赋值、和析构函数全部注释掉,这时用右值去构造s2对象时就会调用Person默认生成的移动构造函数。**注意:**这里不是初始化,而是给声明的成员变量一个缺省值。

2024-09-16 20:56:35 779

原创 【C++11右值引用的移动语义和完美转发】

这里需要说明的是,对于返回局部对象的函数,就算只是调用函数而不接收函数的返回值,也会存在一次拷贝构造或移动构造,因为函数的返回值不管你接不接收都必须要有,而当函数结束后该函数内的局部对象都会被销毁,所以就算不接收函数的返回值也会调用一次拷贝构造或移动构造生成临时对象。右值引用和万能引用的区别就是,右值引用需要是确定的类型,而万能引用是根据传入实参的类型进行推导,如果传入的实参是一个左值,那么这里的形参t就是左值引用,如果传入的实参是一个右值,那么这里的形参t就是右值引用。

2024-09-15 23:12:48 635

原创 【C++11(一)之入门基础)】

在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。

2024-09-03 18:48:33 957 2

原创 【Linux私房菜(八)之动静态库】

而实际上,对于可能频繁用到的源文件,比如这里的test1.c、test2.c、test3.c、test4.c,我们可以将它们的目标文件test1.o、test2.o、test3.o、test4.o进行打包,之后需要用到这四个目标文件时就可以之间链接这个包当中的目标文件了,而这个包实际上就可以称之为一个库。静态库是程序在编译链接的时候把库文件的代码复制到可执行文件中的,生成的可执行程序在运行的时候将不再需要静态库,因此使用静态库生成的可执行程序的大小一般比较大。

2024-08-23 22:24:52 590

原创 【鸟哥的Linux私房菜(七)之文件IO】

我们知道,当fopen以写入的方式打开一个文件时,若文件不存在,则会自动在当前路径创建该文件,那么这里所说的当前路径指的是什么呢?例如,我们在Test_2024_8_15目录下运行可执行程序myproc,那么该可执行程序创建的log.txt文件会出现在Test_2024_8_15目录下。那是否意味着这里所说的“当前路径”是指“当前可执行程序所处的路径呢?这时我们可以将刚才可执行程序生成的log.txt文件先删除,然后再做一个测试:回退到上级目录,在上级目录下运行可执行程序。

2024-08-18 15:06:13 815 1

原创 [表达式求值模板】

(1)如果栈顶是+,即将入栈的是+,栈顶优先级高,需要先计算,再入栈;(3)如果栈顶是*,即将入栈的是+,栈顶优先级高,需要先计算,再入栈;(4)如果栈顶是*,即将入栈的是*,栈顶优先级高,需要先计算,再入栈;(2)如果栈顶是+,即将入栈的是*,栈顶优先级低,直接入栈;一开始,初始化好输入的字符串,以及操作数栈,运算符栈。如果栈顶的运算符优先级高,先出栈计算,新运算符再入栈。一步步,扫描字符串,操作数一个个入栈,运算符也入栈。如果栈顶的运算符优先级高,先出栈计算,新运算符再入栈。

2024-08-14 14:05:20 347

原创 [KMP算法模板]

【代码】[KMP算法模板]

2024-08-13 20:03:10 82

原创 【鸟哥的Linux私房菜(六)之自定义shell和函数与进程相似性】

当执行./myshell命令后,便是我们自己实现的shell在进行命令行解释,我们自己实现的shell在子进程退出后都打印了子进程的退出码,我们可以根据这一点来区分我们当前使用的是Linux操作系统的shell还是我们自己实现的shell。一个进程可以使用fork创建一个子进程,然后使用exec系列函数将子进程的代码和数据替换为另一个程序的代码和数据,之后子进程就用该程序的数据执行该程序的代码,从而达到程序之间相互调用的效果。我们使用以下C程序,便可以分别调用以上三个程序。程序之间相互调用带来的好处之一。

2024-08-10 12:42:15 506

原创 【浮点数二分、高精度、前缀和、差分模板】

【代码】【浮点数二分、高精度、前缀和、差分模板】

2024-08-07 20:18:45 175

原创 【快排、归并、二分模板】

【代码】【快排、归并、二分模板】

2024-08-05 21:21:37 209

原创 【鸟哥的Linux私房菜(五)之进程控制篇】

四、int execv(const char *path, char *const argv[]);第一个参数是要执行程序的路径,第二个参数是一个指针数组,数组当中的内容表示你要如何执行这个程序,数组以NULL结尾。例如,要执行的是ls程序。

2024-08-04 21:59:49 1004 1

原创 【鸟哥的Linux私房菜(四)之进程概念篇】

进程概念

2024-08-03 17:59:58 783

原创 【初识操作系统OS】

OS

2024-07-27 12:51:39 809 1

原创 【冯 • 诺依曼体系结构】

冯 诺依曼体系结构

2024-07-27 10:52:56 585 1

原创 鸟哥的Linux私房菜(三)之环境开发工具篇

yum,vim,gcc/g++,gdb,make/Makefile

2024-07-26 13:59:32 1026 1

原创 【鸟哥的Linux私房菜(二)之权限篇】

LInux权限讲解

2024-07-17 21:27:51 1037 1

原创 【鸟哥的Linux私房菜(一)之入门指令篇】

玩转Linux快速掌握基本指令

2024-07-14 16:49:09 919 1

原创 【红黑树变色+旋转】

红黑树

2024-06-07 21:45:19 708 3

原创 [AVL数四种旋转详细图解]

AVL树

2024-06-06 17:49:33 563

原创 【STL详解(六)——list的模拟实现】

List模拟实现

2024-05-30 00:19:14 651 1

原创 STL详解(五)——list的使用

STL中list函数的使用

2024-05-28 09:26:36 1035 2

原创 【C++STL详解(四)------vector的模拟实现】

vector模拟实现

2024-05-25 20:22:36 1109 2

原创 【C++STL详解(三)vector使用方法】

STL使用方法

2024-05-22 23:45:24 752 2

原创 C++STL详解(二)String类的模拟实现

string模拟实现

2024-05-21 15:50:11 750

原创 【C++STL详解(一)string使用方法】

string();//构造一个空字符串//拷贝str//从pos位置开始取len个字符拷贝//复制s所指的字符序列//复制s所指的字符序列前n个//生成n个c字符构成的字符串//迭代区间构造string s1;//构造空字符串//复制"hello string"//复制"hello string"的前3个字符//生成10个's'字符的字符串//生成s2的复制品//复制s2中从字符位置0开始并跨越4个字符的部分//通过迭代区间构造string```cpp。

2024-04-26 23:01:40 886

原创 C++类和对象(三)

若一个类没有默认构造函数,那么我们在实例化该类对象时就需要传参对其进行初始化,所以实例化没有默认构造函数的类对象时必须使用初始化列表对其进行初始化。

2024-04-16 16:50:37 879

原创 C++类和对象(二)

类的六大默认成员函数

2024-03-25 20:49:33 575 1

原创 【C++类和对象(一)】

C++类和对象入门

2024-03-22 16:30:46 1036

原创 【C++入门基础】

c++入门知识

2024-03-21 23:11:51 697

原创 C++多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写继承派生类和基类中只有重写和重定义,重载必须在同一作用域,函数名相同就构成隐藏,如果是虚函数,且符号返回值和参数列表相同,就构成重写。注意:重写的两个函数必须是虚函数。

2024-02-23 19:27:56 1042 8

原创 C++STL详解(一)一一string类介绍和使用

string();//构造一个空字符串//将str拷贝构造生成一个复制品//复制str中从字符位置pos开始并跨越len个字符的部分//复制s所指的序列//复制s所指的序列前n个字符//生成n个c字符的字符串使用示例:使用前要包含string头文件**注意nops是一个无符号的-1转换成有符号是32个比特位全1大小实际是2^32次方约等于4个G,所以我们不可能定义那么长的字符串,所以len缺省值给npos默认取到最后。

2024-02-22 11:21:21 902

原创 C++【模板】

【代码】C++【模板】

2024-02-07 10:18:30 449

空空如也

空空如也

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

TA关注的人

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