自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++---继承知识总结

C++继承有关知识的总结

2024-09-06 15:21:24 817

原创 C++STL---priority_queue知识总结及模拟实现

和stack与queue一样,priority_queue也是一种容器适配器。他的本质其实是堆,作优先级队列的底层需要能够通过随机迭代器访问,所以他的底层是可以由vector和queue实例化,默认情况下priority_queue默认是用vector作为底层实例化,此外我们还可以特指定deque作为他的底层进行实例化。需要支持随即迭代器,是因为要始终维持堆,优先级队列的本质就是堆。容器适配器通过在需要时自动调用算法函数make_heap,push_heap,pop_heap来始终维持堆。

2024-07-17 22:08:11 906

原创 C++STL---stack && queue模拟实现

对于这两个容器适配器的模拟实现非常简单,因为stack和queue只是对其他容器的接口进行了包装,在STL中,若我们不指明用哪种容器作为底层实现,栈和队列都默认是又deque作为底层实现的。也就是说,stack和queue不管是用哪种容器实现出来的,实际上定义出来的都是对容器进行了封装。

2024-06-07 20:23:51 759 1

原创 C++STL---stack && queue知识汇总

C++将stack和queue划归到了Containers中,但严格的说这并不准确,stack和queue实际上已经不再是容器了,而是属于容器适配器,适配器做的功能是转换,即:它不是直接实现的,而是由其他容器封装转换实现的,这我们会在后面详谈。它们作为容器适配器,和容器最大的差别就是它们没有迭代器,也不是说它想要迭代器,但是当时编写STL的大佬没给他们写,而是他们根本就不需要迭代器,因为stack的原则就是"后进先出",queue的原则就是"先进先出",如果有了迭代器就没办法保证他们的原则了。

2024-06-07 16:00:53 884

原创 C++---模板进阶(非类型模板参数,模板的特化,模板分离编译)

1.模板复用了代码,节约资源,更快的迭代开发,有了模板才有了C++的标准模板库STL的诞生2.增强了代码的灵活性。

2024-06-06 20:41:28 1167

原创 C++STL---list模拟实现

本文我们模拟实现STL中的list,为了模拟实现list,实际上我们需要实现三个类,分别为:_list_node , _list_iterator , list。

2024-06-06 18:43:21 830 4

原创 C++STL---list知识汇总

C++STL---list知识总结

2024-06-02 16:59:56 977 6

原创 C++STL---vector模拟实现

vector模拟实现

2024-06-01 21:43:10 1089

原创 我的创作纪念日

在128天前,我踏入了编程的世界,成为一名创作者。我的初心是探索编程的无限可能,通过代码来解决实际问题,同时分享我的学习过程和心得体会。我希望通过我的分享,能够启发和帮助更多对编程感兴趣的朋友。

2024-06-01 11:28:44 312

原创 C++STL---vector知识总结

1.vector是表示可变大小数组的序列容器2.vector和数组一样,也是采用连续空间来存储数组,也就是说可以用下标的方式对vector的元素进行访问3.vector的大小可以动态变化,当vector需要重新分配大小时,会开辟一个新数组,然后将所有元素移到当前这个新数组中,并释放原来的数组空间4.vector分配空间的策略:vector会分配一些额外的空间适应可能的增长,因此存储空间一般会比实际需要的空间更大一些,所以在末尾插入元素时是在常数的时间复杂度内完成的。

2024-05-30 20:29:38 611

原创 C++STL---模拟实现string

我们这篇文章进行string的模拟实现。

2024-05-29 09:00:00 913 1

原创 C++STL---string知识汇总

我们现在开始C++STL的学习,从这时开始我们就要锻炼自己查看英文文档的能力,每种数据结构都有上百个接口函数,我们把他们全部记下来是不可能的,所以我们只记最常见的20几个接口,其他的大概熟悉有什么功能,用的时候去查看文档。

2024-05-26 20:42:47 837 4

原创 Linux---进程间通信之匿名管道

管道通信既不是system V标准也不是prosix标准,我们说不同的通信方式本质上就是不同的模块提供的公共空间,所以对于管道通信来说就是文件系统给两个进程提供的公共空间。在现实生活中也有许多管道,例如:水管,输油管等。他们一般都会有一个入口和一个出口,用来传输人们所需要的资源。而我们计算机中的管道传输的是数据,也有一个入口和一个出口,对应的就是发送数据的进程和接收数据的进程。

2024-05-16 21:51:55 1055 3

原创 C++类和对象(补充)

所以。

2024-05-16 18:45:02 684 2

原创 C++类和对象

1.将声明和定义都放在类内。需要注意:若成员函数在类内定义,编译器很可能会将其当成内联函数处理。2.将声明放在头文件中,定义放在源文件中。这样的话,定义成员函数的时候需要加上类名::用于指明成员属于哪个函数一般情况下,我们更推荐第二种定义方法。

2024-05-05 20:22:24 781 4

原创 Linux---动静态库

但是,有可能进程1共享区只是一部分区域映射到某个库,进程2共享区也只是一部分区域映射到某个库,但是不管最终物理内存到虚拟地址是怎样映射的,可执行程序加载到物理内存中的任何位置,最后一定要保证库中产生的各种代码与这个库加载到内存中的位置和映射到共享区的位置是没有关系的,这就是产生位置无关码。如果是静态链接,形成进程后就没有共享区,此时代码区包括自己的代码也包括库代码,这样的话假如有10个程序都有cout函数,程序就把每份c++标准库都拷贝一份到代码区,这时在内存中就会有10份重复的库代码,很浪费内存。

2024-05-04 09:56:54 1194 1

原创 Linux---软硬链接

在使用ls命令时,加上-i的选项就可以在第一行查看文件的inode,这里我们可以看到我们的软链接文件和原本的文件的inode不同,也就是说我们的软链接文件有自己的inode,并且软链接文件和原有文件的属性也不一致,例如我们原本文件权限为0664,文件大小为0,我们的软链接文件权限则为0777,文件大小为4。这说明我们创建软链接文件时操作系统会给我们创建一个新的文件,这个文件有自己的属性和inode,但是如果我们执行这两个文件的话,二者的执行结果是一致的。原因就是创建目录文件时,目录文件下会自动生成。

2024-05-01 19:53:44 802 2

原创 C++---入门基础

命名空间的一般定义namespace N1//N1就是命名空间的名称int a1;//既可以定义变量int add(int x,int y) //又可以定义函数命名空间还可以嵌套定义namespace N2 //定义一个空间名为N2的命名空间int a;namespace N3 //在N2内嵌套定义一个空间名为N3的命名空间int b;多个相同名称的命名空间同一工程内,允许出现多个名字相同的命名空间,编译器会将这些成员整合在同一个命名空间内。

2024-04-28 19:41:03 825 2

原创 Linux---文件系统

分区500GB的磁盘空间被拆分成每个元素大小是512byte的数组,我们将得到10多亿个扇区,那样的话实在难以管理,所以操作系统为了更好的管理磁盘,会对磁盘进行分区分区操作。磁盘分区就是使用分区编辑器在磁盘上划分几个逻辑部分,这样的话不同的目录和文件就可以存储进不同的分区,分区越多,就可以将文件的性质区分的越细,在不同的地方存储不同性质的文件以便于管理文件。例如在我们电脑中,通常只有一块磁盘,但是我们电脑通常会被分为C盘和D盘等等。格式化磁盘完成分区后,还需要对磁盘进行格式化。

2024-04-25 21:19:41 1046 3

原创 Linux---FILE模拟实现

上篇文章,我们主要介绍了缓冲区原理,知道语言级缓冲区和文件描述符一样就是FILE结构体中的一个成员,这篇文章我们实现一个FILE的demo代码。以上就是模拟实现FILE的代码,很简单,我在此就不赘述了。

2024-04-10 21:40:17 291 1

原创 linux---缓冲区及FILE理解

在介绍缓冲区问题之前我们先来看一段代码:结果为:这正是我们想要的结果。对此,我们再对这段代码做一些修改:我们在代码最后加上fork()函数,创建子进程。其实结果还是我们想的那样,很正常。但是当我们把输出结果重定向到文件中去的话,就会出现下面这样非常诡异的现象:我们可以发现,重定向到磁盘文件buf.txt中的数据,顺序乱了,而且刚刚我们使用C语言接口打印的数据全都输出了两份,这究竟是为什么呢?其实这就是缓冲区搞得鬼。

2024-04-10 17:58:24 952 1

原创 Linux---基础IO(万字解读文件知识)

我们要注意,如果我们使用系统接口write时不用强制刷新,但是如果我们在使用C语言中printf函数时即使末尾加上了‘\n’时,不fflush强制刷新的话,是没有办法看到结果的,这是因为printf后数据放在了语言层的缓冲区,fflush之后,就会将放在缓冲区的数据刷新到fd指向的文件,加上‘\n’也不管用的原因是原本fd=1指向的是显示器,显示器采用的是行刷新,而现在fd=1指向的磁盘文件log.txt,而磁盘文件采取的是全刷新,也就是缓冲区满后才刷新,所以‘\n’也无法刷新。

2024-04-07 20:36:34 789 1

原创 linux---简单模拟实现shell(内置命令的解析)

我们要明白:每个进程都有他自己的工作路径,我们在执行cd命令的时候,是先进行了fork(),创建了子进程,用子进程执行的cd命令,也就是说我们cd更改的是子进程的工作路径,跟父进程(myshell进程)没有关系,在子进程完成cd命令退出后,那么子进程的工作路径也就随之消失了。而我们做cd命令的时候,我们内心期望改的是父进程的路径,我们要解决这个问题的话就需要不通过子进程修改工作目录,当我们发现第一个子串是cd的时候,就要直接更改工作目录,更改工作目录的工作就交给chdir函数来完成。

2024-03-29 21:35:06 1223 3

原创 Linux---进程替换

linux进程替换

2024-03-22 21:03:29 1216 2

原创 linux----进程等待

而非阻塞调用,则是当父进程执行到wait函数的时候,若子进程此时没有结束,父进程则接着去执行自己的代码,并且间隔一段时间就来查询一下子进程是否结束,如果子进程还没结束的话,就立刻返回接着执行自己的代码,直到子进程结束时回收子进程的资源。通过以上的实验我们可以得知:wait函数可以帮助我们回收已经结束的子进程,并且采取的是阻塞式等待的方法,即当父进程执行到wait函数的时候,如果子进程还没执行完的话,父进程就会一直在那里等待,直到子进程运行结束要退出父进程才会用wait函数回收完子进程后接着执行后面的代码。

2024-03-21 21:04:19 997 1

原创 环境变量与对main函数三个参数的解释

这些变量在整个系统中从bash往后的其他所有进程都会访问到,不同的环境变量会有不同的用途,例如:环境变量HOME就是记录着当前用户的家目录,所以在命令行上使用cd ~的时候可以直接将当前路径切换到家目录下,cd ~就直接变成了cd HOME,环境变量HOSTNAME储存着主机名,所以Linux可以知道当前使用机器的主机名,环境变量PWD时时刻刻记录着的当前所在路径,所以在使用pwd指令的时候可以在屏幕上显示当前所在的路径,那么这就是环境变量存在的意义,它可以帮助操作系统解决一些不同领域上的问题。

2024-03-13 20:51:14 860

原创 fork函数与进程退出

调用fork函数创建子进程之后,到底是父子进程谁先执行后续的代码我们不知道,那是调度器的工作,但是我们知道无论谁先执行后续的代码,肯定有一个进程对id进行修改,发生修改时就会产生写时拷贝,所以内存上其实会存在两个变量记录fork函数的返回值,而不是一个变量记录两个值。也就是说fork()函数的创建子进程的功能在return执行之前就已经执行完毕,当子进程创建好之后就有两个执行流执行下面的代码,所以return指令会被执行两次,以至于fork函数会有两个不同的返回值,子进程返回0,父进程返回子进程id。

2024-03-10 21:25:24 1147

原创 linux进程地址空间

以前学习的地址空间其中堆区和栈区的空间会随着程序的改变而发生相应的改变,栈区向低地址的方向生长,堆区向高地址的方向生长,而数据区和代码区的大小是固定的,不会随着代码的改变而改变。这就是我们以前掌握的知识。但现在的问题是我们之前学习的内存指的是我们电脑硬件的内存吗?我们由一段代码验证一下。结果我们却得到了一个很奇怪的运行结果:上面那段代码通过死循环语句不断地打印val的值和val的地址,在五秒之后,子进程将val的值修改成了300,之后子进程的val则为300,父进程的val还是100

2024-03-08 21:23:22 1427 2

原创 Linux权限详解

文件权限=人(角色)+ 文件属性(读[r],写[w],执行[x])

2024-01-25 13:59:50 929 1

空空如也

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

TA关注的人

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