自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux——信号

当某个信号的处理函数被调用时,内核自动将当前信号加入进程的信号屏蔽字,当信号处理函数返回时自动恢复原来的信号屏蔽字,这样就保证了在处理某个信号时,如果这种信号再次产生,那么它会被阻塞到当前处理结束为止,如果在调用信号处理函数时,除了当前信号被自动屏蔽之外,还希望自动屏蔽另外一些信号,sa_mask字段说明这些需要额外屏蔽的信号,当信号处理函数返回时自动恢复原来的信号屏蔽字。·函数sigfillset初始化set所指向的信号机,使其中所有信号的对应bit置位,表示该信号集的有效信号包括系统支持的所有信号。

2023-12-06 15:50:58 63

原创 Linux——进程间通信

管道是Unix中最古老的进程间通信的形式·我们把从一个进程链接到另一个进程的一个数据流称为一个“管道”

2023-11-18 17:00:44 70

原创 C++——哈希

unordered_map是存储<keym value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。·在unordered_map中,键值通常用于唯一的表示元素而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。·在内部,unordered_map没有对<key, value>按照任何特定的顺序排序,为了能在常数范围内找到key对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。

2023-11-07 10:21:41 97

原创 C++——AVL树及其模拟实现

int _bf;

2023-10-27 11:19:12 135

原创 C++——map和set

set是按照一定次序存储元素的容器·在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中元素不能在容器中修改,但是可以从容器中插入或删除他们。·在内部,set中元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。·set容器通过key访问单个元素的速度通常比undordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。·set在底层使用搜索二叉树(红黑树)实现的。

2023-10-25 17:29:53 95

原创 C++——搜索二叉树及其模拟实现

情况d:在它的右子树中寻找中序下的第一个节点(关键值最小),用它的值填补到被删除节点中,再来处理该节点的删除问题——替换法删除。情况b:删除该节点且使被删除节点的双亲节点指向被删除节点的左孩子节点——直接删除。情况c:删除该节点且使被删除节点的双亲节点指向被删除节点的右孩子节点——直接删除。2、KV模型:每一个关键码key,都有与之对应的值value,构建一颗搜索二叉树。·若它的左子树不为空,则左子树上的所有节点的值都小于根节点的值。·若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。

2023-10-02 09:34:07 42

原创 Linux——文件相关

文件 = 内容 + 属性在Linux中有一个理解叫一切皆文件。站在系统的角度,能够被input读或者能够output写出的设备就叫做文件。狭义的文件:普通的磁盘文件广义的文件:显示器,键盘,网卡,声卡,显卡几乎所有的外设都可以被称为文件。什么是当前路径?当一个进程运行起来的时候每个进程都会记录自己当前所处的工作路径。C语言默认会打开三个输入输出流,分别是stdin,stdout,stderr这三个流的类型都是FILE*,fopen返回值类型,文件指针通过fopen打开文件的方式rr+w。

2023-09-22 17:48:12 48

原创 C++——多态相关

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如student继承了person。person对象买票全价,student对象买票半价。在继承中要构成多态还有两个条件:(1)必须通过基类的指针或者引用调用虚函数(2)被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写重载:两个函数在同一作用域、函数名形同参数不同重写(覆盖):两个函数分别在基类和派生类的作用域、函数名/参数/返回值都必须相同(协变例外)、两个函数必须是虚函数。

2023-09-15 17:40:19 25

原创 C++——继承相关

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行拓展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触到的复用都是函数复用,继承是类设计层次的复用。上面的代码中person是父类,也称为基类。student是子类,也成为派生类。

2023-09-15 15:59:32 19

原创 Linux——进程控制

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。事实上,只有execve是真正的系统调用,其它五个函数最终都调用execve,所以execve在man手册第二节,其他函数在man手册第三节。·进程一旦变为僵尸进程,那就刀枪不入,kill -9也无能为力,因为谁也没办法杀死一个已经死去的进程。如,子进程运行完成,结果对还是不对,或者是否正常退出。·子进程退出,父进程如果不管不顾,就可能造成僵尸进程的问题,进而造成内存泄漏。

2023-09-12 10:14:04 19

原创 Linux——环境变量

我们在编写C/C++代码的时候,在链接的时候,从来不知道我们所链接的动静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时,要用extern声明。·环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。·环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。5、set:显示本地定义的shell变量和环境变量。3、env:显示所有环境变量。

2023-09-11 10:40:26 18

原创 C++——stack和queue相关及其模拟实现

stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。·stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。·stack的底层容器可以是任何标准容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作。empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作。

2023-09-03 10:39:45 23

原创 C++——list相关以及模拟实现

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。·list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。·与其他的序列式容器相比(array ,vector,deque),list通常在任意位置进行插入,移动元素的执行效率更好。·与其他序列式容器相比,list最大的缺陷是不支持任意位置的随机访问。

2023-09-03 09:49:46 19

原创 C++——vector相关及其模拟实现

vector的文档介绍1.vector是表示可变大小数组的序列容器。2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但又不想数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3.本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移动到这个数组。

2023-08-19 15:23:40 49

原创 C++——string类介绍与模拟实现

resize(size_t n)与resize(size_t n , char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n , char c)用字符c来填充多出的元素空间。C语言中,字符串是以'\0'结尾的一些字符的集合,为了方标操作,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

2023-08-14 10:59:50 29

原创 C++——模板初阶

class 类模板名//类内成员定义public:,_size(0){}//在类中声明,在类外定义~vector();//类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)

2023-08-14 09:56:32 30

原创 Linux——gcc/g++使用、make/Makefile、Linux调试器-gdb使用

工程是需要被清理的,像clean这种,没有被第一个目标文件直接关联,那么它后面所定义的命令将不会被执行,不过,我们可以显示要make执行。·一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。·但是一般我们这种clean的目标文件,我们将它设置为伪目标,用.PHONY修饰,伪目标的特性是,总是被执行的。

2023-07-25 16:22:51 415

原创 C++——内存管理

delete p2;//内置类型几乎是一样的free(p3);delete p4;free(p5);return 0;注:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc和free不会。·new的原理(1)调用operator new函数申请空间(2)在申请的空间上执行 构造函数,完成对象的构造。

2023-07-24 16:15:14 274

原创 数据结构——排序(C语言实现)

稳定性:假定在排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i] = r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的,否则称为不稳定的。基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。·希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算。

2023-07-24 09:55:31 232

原创 Linux——Linux权限相关

文件默认权限的二进制是110110110,权限掩码的二进制是000000010,将权限掩码按位取反就是111111101,将取反后的与文件默认权限按位与就是110110100。实际上你所创建的文件和目录,看到的权限往往不是上面的值。第一位是文件类型,2-10位是权限,权限的前3位是文件所有者的权限,权限的中间3位是文件所属用户组的权限,权限的后3位是其他用户的权限。执行(x):execute对文件而言,具有执行文件的权限;·文件和文件目录的所有者所在的组的用户:g---group。

2023-07-23 16:43:00 39

原创 C++初阶——类和对象(下)

虽然上述构造函数调用后,对象中已经有了一个初值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类内部声明,声明时需要加friend关键字。

2023-07-14 16:15:22 64 1

原创 C++初阶——类和对象(中)

先定义一个flag为1,假设一个为更大的日期另一个为更小的日期,如果假设错误就把flag设为-1,然后定义一个天数n,让小的日期++,n也跟着++知道两个日期相等,最后用n乘以flag就可以算出正负。C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。构造函数是特殊的成员函数,需要注意的是,构造函数虽然名叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。注:析构函数不能重载。

2023-07-14 16:14:16 73 1

原创 C++初阶——类和对象(上)

/类体:由成员函数和成员变量组成//一定要注意有分号class为定义类的关键字,ClassName为类的名字(这个可以自己取名),{}中为类的主体,注意类的定义结束后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数成为类的方法或者成员函数。类的两种定义方式:1、声明和定义全部放在类体中,需要注意的是成员函数如果在类中定义,编译器可能将其当成内联函数处理。

2023-07-09 09:54:41 64 1

原创 数据结构——二叉树(初阶,用C语言实现)

BTNode;// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树// 二叉树销毁// 二叉树节点个数// 二叉树叶子节点个数// 二叉树第k层节点个数// 二叉树查找值为x的节点// 二叉树前序遍历// 二叉树中序遍历// 二叉树后序遍历// 层序遍历// 判断二叉树是否是完全二叉树。

2023-06-06 10:04:42 48

原创 C++入门(有C语言的基础之上)

定义命名空间,需要使用namespace关键字,后面跟命名空间的名字,然后接一堆{}即可,{}中为命名空间的成员。需要注意的是命名空间可以定义变量、函数、类型,命名空间可以嵌套,同一个工程中允许多个相同名称的命名空间,编译器最后会合成同一个命名空间。

2023-05-28 15:33:58 400

原创 数据结构——栈和队列及其实现(C语言)

本篇文章是在介绍栈和队列的相关概念及其用C语言的实现。

2023-05-19 17:52:31 302 1

原创 数据结构——链表相关(用C语言实现)

我们再学习数据结构时,链表是一个十分重要的一个知识点,一下将会对齐进行介绍以及相关功能的实现。

2023-05-13 16:25:28 73

原创 C语言——计算结构体大小

如何计算结构体的大小

2023-04-06 17:21:53 123 1

原创 C语言——模拟实现memcpy与memmove

模拟实现内存操作函数memcpy和memmove函数。

2023-03-27 16:30:52 225

原创 扫雷—简易版

此篇文章是介绍如何用C语言来写一个简易版的扫雷小游戏。扫雷的规则很简单,有X*X的棋盘,在棋盘中布置n个雷,玩家选择棋盘中任意一个位置,如果该位置是雷则游戏结束,如果不是雷显示该位置周围8个位置中一共有几个雷并且显示出来,玩家直到把所有雷都排查出来则游戏结束排雷成功。效果图如下。下面介绍如何完成这个小游戏。

2023-02-05 19:28:18 114

原创 一个简单的自我介绍

先简单介绍一下我自己,我是已经毕业快一年的本科生,由于平时对计算机感兴趣,想要学习编程来提高自己,借此找一份相关的工作。我会在接下来的学习时光里分享我所学习的知识与一些自我的看法。学习任何东西相关的基础知识都是必不可少的,在我看来学习C\C++不仅要学好语言的语法,并且对于计算机方向来所基础四大件是必不可少的。计算机网络、操作系统、数据结构、计算机组成原理,对于这些的学习是很必要的,其中计算机网络和数据结构更是重要。大家好,我是一个喜欢代码编程的学习新人,这是我第一次写博客,我用此文章来介绍一些我自己。

2023-02-01 17:04:25 87

空空如也

空空如也

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

TA关注的人

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