自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux学习_线程

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

2024-06-11 15:40:30 984 1

原创 Linux学习_信号

捕捉信号或者说向内核注册了一个信号处理函 数该函数返回值为void,可以带一个int参数通过参数可以得知当前信号的编号当某个信号的处理函数被调用时,内核自动将当前信号加入进程的信号屏蔽字当信号处理函数返回时自动恢复原来的信号屏蔽字,这样就保证了在处理某个信号时如果这种信号再次产生那么 它会被阻塞到当前处理结束为止。如果在调用信号处理函数时,除了当前信号被自动屏蔽之外还希望自动屏蔽另外一些信号则用sa_mask字段说明这些需要额外屏蔽的信号,

2024-06-04 14:10:43 805 1

原创 C++_右值引用和移动语义的学习

问题(这里的对象是出了函数,生命周期还没结束的,可以返回该对象的引用减少拷贝),但是如果返回的对象生命周期在函数作用域内(将亡值),那出了函数,只能返回该对象的拷贝,编译器一般会对这个过程。,即PerfectForward接受的参数是左值或右值,但是Fun的参数t只会是左值。右值又叫将亡值,顾名思义就是生命周期要结束的值,移动构造就是把将亡值的资源占为己用,反正这些资源很快也要随右值死亡而回收。就比如下面函数中,s 是某个右值的右值引用,那s 的属性就是左值,才能进行swap,所以ss 是s 的左值引用。

2024-05-26 17:56:19 791

原创 C++_C++11的学习

而且。

2024-05-23 18:42:24 1106

原创 C++_哈希的应用

与上面大体一样,只是最后不只是用map<string,int>统计次数,还需要K个大小的priority_queue<map<string,int>>,用小根堆的思想去统计:新的map的int如果比堆顶大就插入再调整堆,否则不插入。一种支持删除的方法:将布隆过滤器中的每个比特位扩展成一个小的计数器,插入元素时给k个计数器(k个哈希函数计算出的哈希地址。)加一,删除元素时,给k个计数器减一,通过多占用几倍存储空间的代价来增加删除操作。在能够承受一定的误判时,布隆过滤器比其他数据结构有这很大的空间优势。

2024-05-18 13:55:43 813

原创 C++_哈希表的学习

4.的元素访问。

2024-05-16 18:39:30 693

原创 C++_红黑树的学习

1. u 结点不存在,则cur 一定是新增结点,因为如果cur不是新增结点,则cur和p一定有一个结点的颜色是黑色,不然就破坏了各路径黑色结点数量相等的条件,但是这与更新条件相违背:只有c和p都是红色才进行更新。2.u 结点存在且为黑,则cur原来一定是黑色的,只是因为cur在的子树在先前已经更新完了,cur颜色由黑色改成红色。g的右孩子,cur为p的左孩子,则进行右左双旋转;,g就一定有双亲,且如果g的双亲如果是。p的右孩子,则进行左右双旋转;的左孩子,则进行右单旋转;的右孩子,则进行左单旋转;

2024-05-10 18:40:32 613

原创 C++_AVL树的学习

二叉搜索树虽可以缩短查找的效率,但。所以就出现了即可降低树的高度,从而减少平均搜索长度一棵AVL或者是,或者是具有以下性质的AVL树就是在二叉搜索树的基础上引入了平衡因子,因此AVL树也可以看成是二叉搜索树。那AVL树的插入过程就可以分为:, 插入分以下两种情况:1. 如果pCur插入到pParent的左侧,只需给pParent的平衡因子-1即可2. 如果pCur插入到pParent的右侧,只需给pParent的平衡因子+1即可。

2024-05-05 19:44:47 872

原创 C++_set和map的学习

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

2024-05-02 14:28:32 1008

原创 C++_二叉搜索树的学习

是结点在二 叉搜索树的深度的函数,即结点越深,则比较次数越多,但对于同一个关键码集合,如果各关键码插入的次序不同,可能得到。b.在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树。单支树的情况,就有必要引出AVL树和红黑树,它们可以使二叉搜索树。b、最多查找高度次,走到到空,还没找到,这个值不存在。统计成功后,给定单词就可快速找到其出现的次数,

2024-04-29 14:42:28 611

原创 C++_多态的学习

先判断,s4的输出是在初始化列表之后执行的,所以一定在最后,B和C都在构造的时候要执行A的构造,但是这里是虚继承,在D类的p中,只有一份A即s1,加上A比BC先声明,所以在D的初始化列表中,先执行A,再执行BC,且A的构造只执行一次class A {public:~A() {}public:public:public:delete p;return 0;//输出://class A//class B//class C//class D。

2024-04-27 20:59:23 756

原创 Linux学习_进程等待和替换

表示不关心子进程的退出状态信息。否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。,子进程存在且正常运行,则进程可能阻塞。如果不存在该子进程,则立即出错返回。父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。,则表示检测成功,但是子进程还没退出,需要重复等待。Pid=-1,等待任一个子进程。输出型参数,获取子进程退出状态,如果子进程已经退出,调用wait/waitpid。会立即返回,并且释放资源,获得子进程退出信息。成功返回被等待进程pid。创建子进程后执行的是和父进程相同的程序。

2024-04-12 17:17:10 811

原创 C++_priority_queue的学习

1.优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的2.类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素优先队列中位于顶部的元素3.优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部弹出,其称为优先队列的顶部4.底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭代器。

2024-04-10 18:58:40 477

原创 C++_List的学习

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素3. list与非常相似:最主要的不同在于是单链表,只能朝前迭代,已让其更简单高效4.与其他的序列式容器相比(arrayvectordeque)list通常在任意位置进行插入、移除元素的执行效率更好5.与其他序列式容器相比,list和。

2024-04-09 15:54:15 650

原创 C++_Vector的学习

(end和rend返回的迭代器是指向最后一个元素后面的位置)resize 和 reserve的对比:reserve是容器预留空间,但在空间内不真正创建元素对象,没有添加新的对象之前,不能访问容器内的元素,reserve()函数和容器的capacity息息相关: 如果n>容器的当前capacity,该函数会使得容器重新分配内存使capacity达到n 如果n<=capacity,该函数调用不会导致内存重新分配,并且容器的capacity不会改变 reserve

2024-04-02 19:04:42 922

原创 Linux学习_进程

bash进程启动的时候,默认会给子进程创建argv[]命令行参数表和env[]环境变量表,这两张表可以交给该进程的子进程,argv[]命令行参数表是用户命令行输入的,env[]环境变量表从OS配置文件中来。尸)进程,僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码,所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入。进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。),优先权高的进程有优先执行权利。

2024-03-27 21:18:02 855

原创 C++_String的学习

标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。的原因是为了与其他容器的接口保持一 致,一般情况下基本都是用size()该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作。个,不同的是当字符个数增多时:resize(n)的参数比string的底层空间总大小小时,来填充多出的元素空间。即作为它的字符类型,使用它的默认。

2024-03-12 20:48:04 937

原创 C++模板初阶

重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。代码的可维护性比较低,一个出错可能所有的重载均出错。类模板实例化与函数模板实例化不同,,对于字符类型也是如此。,不能使用struct。,对于模板函数的使用,

2024-03-11 20:35:03 232

原创 C++内存管理方式

内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。指程序使用系统分配的资源,比方套接字、文件描述符、管道等没有使用对应的函数释放掉,导致系统资源的浪费,严重可导致系统效能减少,系统执行不稳定。,如果malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施就继续申请,否则就抛异常。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。

2024-03-11 20:01:18 796 1

原创 初入C++.4

的。

2024-03-10 19:43:49 674 1

原创 初入C++.3

默认的拷贝构造函数对象按内存存储按。

2024-03-09 22:35:31 320 1

原创 yum理解_gdb的使用

1.Linux gcc/g++出来的二进制程序,默认是。,所以同一个文件,release和debug后产生的文件大小是不同的。:打印表达式的值,通过表达式可以修改变量的值或者调用函数。变量名:跟踪查看一个变量,每次停下来都显示它的值。是:编译器形成可执行程序的时候会给可执行程序添加。:执行到当前函数返回,然后挺下来等待命令。调试,必须在源代码生成二进制程序的时候。源代码,接着上次的位置往下列,每次列。:取消对先前设置的那些变量的跟踪。函数名:列出某个函数的源代码。:查看当前栈帧局部变量的值。

2024-03-09 15:28:34 171 1

原创 初入C++.2

构造函数:默认成员函数,我们不写编译器会生成一个默认生成的构造函数,对于内置类型不做处理,自定义类型回去调用他的默认构造如果我们没写任何一个构造函数,编译器才会自动生成的,如果我们写了就不会生成了C++11 委员会对这个语法进行打补丁, 在声明的位置给缺省值分析一个类型成员和初始化需求需要写构造函数我们就自己写;不需要时就用编译器自己生成的结论:绝大多数场景下面都需要自己实现构造函数4.2析构函数与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由。

2024-03-02 20:37:07 1028

原创 初入C++.1

为函数的。

2024-02-06 19:03:25 671 1

原创 排序思路以及代码

3、在走的过程中,若end遇到小于key的数,则停下,begin开始走,直到begin遇到一个大于key的数时,将begin和right的内容交换,end再次开始走,如此进行下去,直到begin和end最终相遇,此时将相遇点的内容与key交换即可。5.将key的左序列和右序列再次进行这种单趟排序,如此反复操作下去,直到左右序列只有一个数据,或是左右序列不存在时,便停止操作,此时此部分已有序。3.堆顶元素与堆的最后一个元素交换,此时堆的末尾位置就是最大的元素,每排序好一个,end值就减一个。

2024-01-26 21:28:54 533 1

原创 二叉树和排序

假设叶子节点个数n0,度为1的节点个数n1,度为2的节点个数n2。由题意得767==n0+n1+n2,即767==n0+n1+n0-1,所以768=2n0+n1。因为2n必定为偶数,所以n1=0,n0=384。假设叶子节点个数n0,度为1的节点个数n1,度为2的节点个数n2。由题意得2n=n0+n1+n2,因为n0=n2+1,所以得2n=n0+n1+n0-1,解得n0=n,n1=1,n2=n-1。1.gap越大,大的值越快调到后面,小的值越快调到前面,数据越不接近有序。为根节点编号,无双亲节点。

2024-01-18 23:50:11 356 1

原创 Linux指令的学习

使用此管道符“|”可以将两个命令分隔开,“|”左边命令的输出就会作为“|”右边命令的输入,此命令可连续使用,第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。head看头部文件,tail看尾部文件,那怎么看中间的文件呢?命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,

2023-11-30 17:26:41 851

原创 循环队列和

节点的度:一个节点含有的子树的个数称为该节点的度;如上图:A的为6叶节点或终端节点:度为0的节点称为叶节点;如上图:B、C、H、I...等节点为叶节点非终端节点或分支节点:度不为0的节点;如上图:D、E、F、G...等节点为分支节点双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;如上图:A是B的父节点孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;如上图:B是A的孩子节点兄弟节点:具有相同父节点的节点互称为兄弟节点;如上图:B、C是兄弟节点树的度。

2023-11-27 22:30:03 924

原创 链表、栈、队列

当慢指针刚进环时,可能就和快指针相遇了,最差情况下两个指针之间的距离刚好就是环的长度。此时,两个指针每移动一次,之间的距离就缩小一步,不会出现每次刚好是套圈的情况,因此:在满指针走到一圈之前,快指针肯定是可以追上慢指针的,即相遇。快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表其实位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。、非顺序的存储结构,数据元素的。

2023-11-24 22:32:09 1018 1

原创 程序的预处理操作

_FILE__//进行编译的源文件__LINE__//文件当前的行号__DATE__//文件被编译的日期__TIME__//文件被编译的时间__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义。

2023-10-20 17:09:19 39 1

原创 文件的结束判定和文件缓冲区

feof在文件读取过程中,用feof函数的返回值直接用来判断文件的是否结束是一件错误的行为。实际上,它是不同文件判断读取结束的方法是不同的。1.文本文件读取是否结束,判断返回值是否为EOFfgetc),或者NULLfgetsfgetc 判断是否为EOFfgets 判断返回值是否为NULL2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。fread判断返回值是否小于实际要读的个数。

2023-10-18 18:48:38 51 1

原创 自定义类型详解

enum Day//星期Mon,Tues,Wed,Thur,Fri,Sat,Sun{}中的内容是枚举类型的可能取值,也叫枚举常量。这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。enum Color//颜色RED=1,GREEN=2,BLUE=42.2枚举的优点1.增加代码的可读性和可维护性2.和#define定义的标识符比较枚举有类型检查,更加严谨。3.防止了命名污染(封装)4.便于调试5.

2023-09-28 20:25:03 22

原创 内存函数和结构体的学习总结

如果source在destination的后面,就采用从前往后的拷贝,如果source在destination的前面,就采用从后往前的拷贝。这是因为,不同结构体类型的数据大小是不确定的,而指针类型数据的大小是固定的,不管你是什么类型的指针,大小都是一样的。这是简单的实现:因为是字节大小的拷贝,对于不同的数据类型,每次拷贝移动的字节数不一样,所以函数参数中要用。该函数的声明:从source开始的数据拷贝到destination处,拷贝的大小是num 单位是。结构体的每个成员可以是不同类型的变量。

2023-09-28 11:14:25 24

原创 关于VS2022使用scanf函数报错问题的解决

首先,先看下错误提示:这是因为scanf在读取数据时不检查边界,所以可能会造成。Microsoft公司觉得这个函数不安全,于是自己在VS编译器中提供了scanf_s这个函数,这个函数提供了边界限制。但是如果我们使用了scanf_s,我们的代码就不跨平台了。解决的方法有3种。

2023-08-25 16:24:09 1035 1

原创 数据的类型和存储

其中,M的范围是[1,2),所以为了提高精度,这个1是不存储的,是从小数点后面第一个1开始存储的,再根据此时小数点的变化来决定E。因为不同类型的数据所占空间不一样,所以不同类型数据的范围也不同,就以char为例。而不同类型的数据间,值的传递也会发生奇妙的变化。计算机只能处理二进制的数据,所以不管是整型还是浮点型,在计算机内存中存储的也是以二进制的形式。大端顺序:数据的高位存储在内存的低地址处,数据的低位存储在内存的高地址处。小端顺序:数据的高位存储在内存的高地址处,数据的低位存储在内存的低地址处。

2023-08-05 19:06:32 171 1

原创 简单的c语言扫雷

解析见注释!

2023-08-02 18:20:42 33 1

原创 编写简单的三子棋程序

关于简单三子棋程序的思考

2023-08-01 21:13:37 35 1

原创 自我认知和规划

对自己的认知和一些想法

2023-06-10 13:19:00 84 1

空空如也

空空如也

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

TA关注的人

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