自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++的二叉搜索树

(英汉词典中的中英文之间的对应关系,通过中文可以快速找到对应的中文,统计单词的出现次数,统计成功后,给定某一个单词就能快速找到其出现的次数)(以词库中所有单词集合中的每个单词作为key,构建一棵二叉搜索树在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误)每一个关键码key都有与之对应的值value,即键值对。只有key作为关键码,结构中只需存储key即可,key就是要搜索的值。多叉搜索树查找:B树系列。

2024-04-25 20:24:13 244

原创 Linux进程概念(五):地址空间 && 写时拷贝

子进程在修改g_val的值后,父进程的g_val不变,子进程的g_val发生改变结论:0x601054是虚拟地址而不是物理地址,否则子进程修改g_val会导致父进程的g_val也改变。

2024-04-25 11:54:10 425

原创 C++的多态

并且最好把基类的析构函数定义成虚函数,在进行动态内存分配和释放(如 new/delete、malloc/free 等)以及使用容器(如 std::vector、std::map 等)等场景下经常需要使用到析构函数作为虚函数。这样可以确保在删除某个派生类型对象时能够正确地释放其所占据内存空间,并依次递归调用所有祖先VTables 所关联但不包括其他VTables 的“virtual” 析构方法以完成整个对象图谱上各层级数据成员和资源回收工作

2024-04-23 21:14:30 835

原创 Linux进程概念(四):进程优先级 && 环境变量

指定进程获取某种资源的先后顺序进程访问的资源(CPU等)是有限的,而会有多个进程试图访问同一资源ps -al进程的优先级,值越小优先级越高也叫nice值,是一个整型的进程优先级的修正数据,nice的取值范围是[-20,19](40个)Linux中,每次调整优先级都是基于默认PRI的,且不建议频繁调整优先级。

2024-04-22 23:38:39 655

原创 <动态规划> 斐波那契数列模型

即dp表内某位置的值所表示的含义(dp表是一个一或二维数组,填满dp表后,表中的某一个位置的值可能就是我们要的结果)即想好dp[i]等于什么,用之前或之后的状态推导出dp[i]的值即保证填表时不会越界即当前调表时所需要的状态已经计算过了即返回dp[n]

2024-04-21 00:28:22 73

原创 C++的继承

STL中不同的“容器”的迭代器在使用时是一样的,但实际上迭代器的底层实现并不相同,对于vector、string等空间连续的“容器”,它们的迭代器可以直接使用原生指针,而对于list、stack和quque等空间不连续的“容器”,它们的迭代器需要对原生指针进行封装后才能使用在STL中,“容器”指代各种数据结构,容器的概念是在docker中才出现的封装:数据和方法放在一起,将可以被外部访问的定义成共有,不想访问的定义成私有和保护。

2024-04-18 20:44:32 993

原创 模板的进阶

优点:复用了代码,节省资源,更快的迭代开发,C++的标准模板库也因此而生增强代码灵活性缺点:模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息十分混乱,不易定位

2024-04-13 21:19:26 926

原创 STL的stack和queue(三):基于适配器模式的反向迭代器

迭代器按性质分类:单向:forward_list双向:list随机:vector / deque迭代器按功能分类:正向反向const。

2024-04-12 19:42:59 416

原创 STL的list(一):基本概念

vector的insert和erase都会导致迭代器失效list的insert不会导致迭代器失效,erase会导致迭代器失效insert导致失效的原因是开辟了新空间后,迭代器扔指向原空间erase导致失效的原因是销毁的空间不是连续的空间,迭代器找不到下一块小空间的位置。

2024-04-07 21:07:03 1053

原创 OJ记录册

OJ练习

2024-04-06 23:26:08 169

原创 STL的stack和queue(一):适配器模式 && 双端 && 优先级队列

适配器模式是一种设计模式,用于将一个类的接口转换成客户希望的另一个接口,这种类型的设计模式属于结构型模式,它涉及到单个类的功能增强,适配器模式中有三个主要角色:目标接口:客户端所期待使用的接口,适配器通过实现这个目标接口来与用户进行交互被适配者:需要被适配以符合目标接口规范的现有类适配器:实现了目标接口,并持有一个对被适配者对象的引用,在其方法内部调用被适配者对象来完成特定操作

2024-04-06 23:25:47 441

原创 STL的list(二):模拟实现 && 迭代器模板

const_iterator而不是const iterator,前者是别名,后者表示迭代器本身不能修改,const迭代器要的是迭代器指向的对象不能被修改而不是迭代器本身不能被修改

2024-04-06 23:23:57 837

原创 Linux进程概念(三):进程的状态

**/R:运行状态,并不意味进程一定在运行中,而是表示进程要么在运行中要么在队列中S:可中断(ctrl + c)睡眠状态,进程在等待"资源"就绪(CPU执行进程的速度极快,显示设备读取速度慢,执行好的内容就会等待输入到显示设备上)T/t:停止状态,可以通过发送SIGSTOP / SIGCONT 信号让T进程停止 / 运行(t是被追踪时停止,比如调试时的打断点操作,T是纯粹的暂停状态)查看进程信号指令:kill -l(9、19、18、杀死进程、暂停进程、继续继续进程)

2024-04-04 23:49:10 407

原创 进程的基本概念 && 进程的创建

process control block,是进程的所有属性的集合,是对所有操作系统中进程控制块的统称,是一个内核中的数据结构,在不同操作系统中进程控制块会有不同的具体名称。函数返回之前完成的,此后的代码会被父子共享包括return id,因此返回两次id,一个是父进程的id,一个是子进程是否创建成功的id。2、两次返回值的id,一个是子进程的id,一个是父进程的id,父进程的id是子进程的pid。包括程序代码和进程相关数据的指针,还有和其它进程共享的内存空的指针。程序的一个执行实例,正在执行的程序等。

2024-04-04 23:48:02 1199

原创 冯诺依曼体系结构 && 操作系统的基本概念

将多个被管理者对象进行描述形成它们各自的数据对象,然后根据这些数据对象选定一种特定的数据结构将这些数据对象组织起来,此时对被管理对象的管理工作就转化成了对特定数据结构的增删查改,这就是一个基本的建模过程

2024-04-03 23:54:53 686

原创 Linxu的开发工具(三):缓冲区 && 调试器gdb

缓冲区是内存空间中的一块区域,在执行printf函数时,里面的字符串会被放入缓冲区中,这些存放在缓冲区中的数据在经历一次“刷新”后就可以在显示屏上显示了(程序结束时以及缓冲区满了时都会“刷新”缓冲区)

2024-04-03 13:54:04 649 1

原创 Linux的开发工具(二):编译器gcc/g++ && Makefile

会不会makefile,从侧面说明了一个人是否具备完成大型Linux工程的能力,一个工程中的源文件不计其数,它们按照类型、功能、模块分别放在若干个目录中,makefile中定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作

2024-03-31 23:35:14 936

原创 C语言的SScanf函数

vs2022中需要提前定义 #define _CRT_SECURE_NO_WARNINGS。format:字符串的格式描述。(浮点型也可以这里不做展示)str:带解析的字符串。

2024-03-28 23:36:21 241

原创 const char * const * p和const char** p的分析以及对C语言中const修饰的变量的“只读”性质的理解

双重间接引用的情况:在二级或更高级别间接访问情况下(const char** p),如果想要确保无法通过间接访问修改数据,则应使用双重 const 修饰符(const T * const * p)此时“只读”性质既应用于第一层解引用操作符所得到的值也应用于第二层(二级指针的*p不能修改了)

2024-03-28 21:53:43 1517

原创 Git(六):企业级项目管理

以上的内容是企业级常用的一种Git分支设计规范:Git Flow模型,但要说的是该模型并不适用所有团队、环境和文化。关键在于站在你的团队或项目的角度考虑:选择的某种分支模型可以帮助你们解决什么问题?它会带来哪些问题?这种模式可以为哪种开发提供更好的支持?公司支持鼓励这种行为吗?最终选择的分支模型最终都是为了让人们更容易的进行软件协作开发,因此,分支模型需要考虑到使用者的需求,而不是盲目听信所谓的“成功的分支模型”所以对于不同公司,规范是会有些许差异,但它们都是为了效率和稳定。

2024-03-28 13:57:16 1061

原创 GIt(五):模拟多人协作

列出所有的分支,包括本地分支和远程分支,如果一个远程分支被拉取到了本地,它将以类似。冲突问题,二者都将file.txt文件新增内容提交给远程仓库,远程仓库不知道要用谁的。在远程master分支下的file.txt文件新增代码“aaa”和“bbb”①开发者2获取远程仓库中开发者1写了一部分的feature-2分支的内容。(此时远程master分支中的file.txt文件仍未被修改)(对远程dev分支与当前dev分支合并后出现的冲突进行修改)由开发者1新增“aaa”,由开发者2新增“bbb”

2024-03-27 23:46:14 976

原创 OJ记录册

同时从前和后两个方向寻找同一个字符,找到位置相等则该元素只出现一次,否则该元素在字符串中出现两次。从前向后找所给字符的位置。从后向前找所给字符的位置。

2024-03-27 00:03:12 693

原创 Github获取ssh key的办法

不管是git bash还是xshell,还是其它软件获取ssh key的方式都一样,只不过查看的位置不同。

2024-03-24 22:52:35 450

原创 Git(四):分布式版本控制系统 && 远程仓库的相关配置

相较于难以记住的commit id,tag可以很好的解决这一问题,当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。

2024-03-24 19:40:12 896

原创 GIt(三):分支操作 && 分支管理策略

分⽀在实际中有什么⽤呢?假设你准备开发⼀个新功能,但是需要两周才能完成,第⼀周你写了50% 的代码,如果⽴刻提交,由于代码还没写完,不完整的代码库会导致别⼈不能⼲活了。如果等代码全 部写完再⼀次提交,⼜存在丢失每天进度的巨⼤⻛险有了分⽀,就不⽤怕了。你创建了⼀个属于你⾃⼰的分⽀,别⼈看不到,还继续在原来的分上正常⼯作,⽽你在⾃⼰的分⽀上⼲活,想提交就提交,直到开发完毕后,再⼀次性合并到原来的分⽀上,这样,既安全,⼜不影响别⼈⼯作。 并且 Git ⽆论创建、切换和删除分⽀,G

2024-03-24 12:50:39 871

原创 STL的vector(一):常见操作 && 模拟实现

STL 的string类怎么啦?C++面试中string类的一种正确写法C++ STL string的Copy-On-Write技术C++的std::string的“读时也拷贝”技术!

2024-03-21 21:49:00 1055

原创 Git(二):文件操作 && 分支操作

(上次提交后是否对文件进行再次修改)git statusgit diff 文件名查看版本库和工作区文件差异指令:git diff HEAD 文件名表示修改前文件(a/ReadMe,改动前文件名是ReadMe)表示修改后文件(b/ReadMe,改动后文件名仍然是ReadMe)表示修改前表示修改后展示改动前的第一行内容展示改动后从第一行开始到第二行的内容(1,2可被理解为行号的范围)工作区中文件的新增、修改或删除都是对工作区的修改。

2024-03-21 18:03:58 1016

原创 Git(一):基本操作 && 三个区

随着版本数量的不断增多,可能会忘记对每个版本的进行修改的内容,文档如此,我们所写的项目代码也是有这样的问题存在的(TXT文件、网页、所有的程序代码等)(比如在第8行新增了一个单词“Linux”,在第10行删除了一个单词“Windows”)(仅知道图片从100kb大小改成了120kb大小)

2024-03-20 21:00:13 1097

原创 STL的string(三):ASCII码 && 模拟实现

字符集中的字符与计算机二进制序列之间的映射关系(字符对应的二进制序列是多少)1、8个比特位(0和1)对应一个字节,根据排列组合的概念,8个比特位一共可以表示出0~255(无符号位)或-128~127(有符号位)一共256个值2、美国通过规定它们国家的字符与计算机二进制序列之间的映射关系,提出了ASCII美国信息交换标准代码的概念,ASCII码表是这些映射关系的总结:在表上找字符'a'对应的数字,将该数字存放给ch,ch在内存上的值就是'a'对应的数97。

2024-03-20 09:18:56 1597

原创 STL的string(一):基本概念 && 常见操作

从字符串的pos开始向后复制len个字符,如果字符串太短或len的大小为string类中的npos,则复制到str的末尾。e size_t(nops是一个静态成员常量,具有size_t类型元素的最大可能值(2^32)- 1)迭代器(iterator)是一种检查容器内元素并遍历元素的数据类型,通常用于对C++中各种容器。(不给len时默认从pos位置起拷贝至字符串末尾止)复制指针s指向的c字符串(包含\0的字符串)内元素的访问,不同的容器有不同的迭代器。(迭代器是一个行为像指针一样的类型)

2024-03-16 20:53:27 1191

原创 C语言的基本类型(二):浮点类型 && 字符类型

单精度浮点数双精度浮点数扩展精度浮点数C标准没有说明float、double和long double类型提供的精度到底是多少,因为不同计算机可以用不同方法存储浮点数,大多数现代计算机遵循IEEE 754标准的规范。

2024-03-15 15:26:25 701

原创 C++模板初阶

Swap(a,b)和Swap(d1,d2)使用的是两种不同的Swap函数,根据汇编指令可以观察到这一点,只是提供了一个模板,具体的实现是要交给编译器来实现的。

2024-03-14 17:45:36 687

原创 OJ记录册

1、求1+2+3+...+n要求不能用乘除法、for、while、if、else、switch、case等关键字及判断语句(A?B:C)2、计算日期到天数的转换3、日期插值4、打印日期5、累加天数6、日期题的简单模板​​​​​​​

2024-03-13 17:26:50 278

原创 C && C++内存管理

高效的I/O映射方式,用于装载一个共享的动态内存库,用户可以使用系统接口创建共享内存,做进程通信。存放非静态局部变量、函数参数、返回值等,栈是向下增长的。用于程序运行时动态内存分配,堆是可以向上增长的。更加高效的管理和读取数据。堆(可以自主控制的区域)存储全局数据和静态数据。可执行的代码、只读常量。

2024-03-12 23:40:38 212

原创 C++的类和对象(七):友元 && 内部类

友元提供了一种突破封装的方式,有时提供了便利,但是友元会增加耦合度,破坏了封装,所以友元不宜多用(开后门)friend 函数声明友元函数和友元类类外无法访问成员函数(没必要)

2024-03-12 23:16:12 743

原创 C++类和对象(六):初始化列表 && static成员

即使在原内容中并没有明确的写出要初始化该自定义类型的成员变量,如果没有默认构造函数就会报错

2024-03-10 23:54:52 450

原创 C++的类和对象(五):赋值运算符重载 && 日期类

赋值运算符如果不显示实现,编译器会生成一个默认的,此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符只能是类的成员函数

2024-03-10 15:16:41 1148

原创 C++的类和对象(四):拷贝构造函数

这是因为,实例化s1对象时在堆上开辟了个空间用于存放元素,接着s2对象要用s1对象的成员变量进行初始化,Stakc类没有显示定义拷贝构造函数,编译器会生成一份默认的拷贝构造函数,默认拷贝构造函数是按值拷贝的,即将s1中的内容原封不动的拷贝到s2中,对于_size和_capacity没问题,但是_array存放的可是s1在堆上开辟的空间的地址,此时将该地址的值也原封不动的传递给了s2的_array,此时s1和s2对象的_array指向同一片空间,当main函数结束时,

2024-03-07 21:01:29 859

原创 C++的类与对象(三):构造函数 && 析构函数 && 对象销毁顺序

实例化对象时我们不屑构造函数,编译器就会自动生成无参的构造函数,从而初始化对象,但是实际上编译器默认生成的无参的构造参数什么也不干,为什么?(我们程序员没有定义一个构造参数是我们的问题,但是你编译器既然为我们自动生成了一个无参的构造参数,你总得让它起点作用吧,就是只让成员变量初始化为0也行啊)

2024-03-06 19:39:41 925

原创 C语言的基本类型(一):整数类型

对整数执行算术运算时,其结果有可能因为太大而无法表示,例如,两个int类型的值进行算术运算时,结果必须仍能用int类型来表示;否则(结果所需位数太多而超出限制)就会发生溢出整数溢出时的行为要根据操作数是有符号型还是无符号型来确定:有符号整数:溢出时,程序的行为是未定义的,程序崩溃

2024-03-05 15:59:05 454

空空如也

空空如也

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

TA关注的人

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