自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux基础IO

这是因为我们没进行重定向之前是默认往1号文件描述符打的因此是行刷新,但是重定向到一个文件就是全刷新,因此在进程退出时,我们的库函数才会打印出来。缓冲区其实就是一块存数据的地方,有了·缓冲区可以方便我们用户的操作加快效率,在语言层的缓冲区的建立有利于我们减少调用系统接口的次数,从而减少我们调用系统的成本。可以看到我们的打印缓冲区写入了我们的helloworld但是由于我们打开的文件不是显示器文件因此是全缓冲并不会直接打印,但是们的缓冲区是有的。因此我们的重定向就是修改我们文件描述符表指向的文件。

2025-03-05 22:38:00 947

原创 Linux进程控制

执⾏⽤⼾通过 atexit或on_exit定义的清理函数。关闭所有打开的流,所有的缓存数据均被写⼊调⽤_exit。

2025-02-18 12:28:50 691

原创 Linux进程概念

我们qq发消息的时候其实就是两台冯诺依曼结构在进行数据交流,首先两者都登录qq运行qq,使qq程序以相关代码加载内存,当有一个发消息时就是从输入设备输入信息,qq已经在我们的内存了,就可以用代码读取数据到我们的内存接着通过网络发送到对方输入设备网卡,对方就可以从网卡读取数据从而看到消息。我们知道一个进程是互相独立的,子进程会拷贝一份父进程的虚拟地址表但是页表里面规定了父子进程的权限访问数据只能以只读方式访问,当父子其中有一方想要修改变量,就会出现错误从而发生写实拷贝再更新页表的映射关系即可。

2025-02-12 14:50:23 843 1

原创 Linux基础开发工具(gcc/c++ make/Makefile gdb/cgdb)

vim就是我们写代码来用的可以理解为一个记事本,本质上就是一个多模式的文本编辑器vim有多种模式本文主要介绍命令模式,插入模式以及末行模式控制屏幕光标的移动,字符、字或⾏的删除,移动复制某区段及进⼊插入模式下,或者到 末行模式只有在插入模式下才能进行文字输入,该模式是我们使用最频繁的编辑模式。⽂件保存或退出,也可以进⾏⽂件替换,找字符串,列出⾏号等操作。

2025-01-21 18:13:10 777 1

原创 Linux软件包管理器yum

关于yum的所有操作必须保证主机(虚拟机)网络畅通!!!可以通过ping指令验证。

2025-01-19 14:07:55 631

原创 Linux权限的概念

由上面的讲述我们就可以知道shell从技术上定义就是:将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。

2025-01-06 19:08:00 615

原创 手把手带你了解Linux基础指令

ls就是对于目录文件来说,就是显示目录文件下所有文件的名字属性,-l就是显示更多的文件属性,-a就是目录下所有的文件,-d就是显示当前目录文件属性而不是当前目录下面的文件属性。cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。来查看一个文件的内容!

2025-01-04 20:57:33 663

原创 c++智能指针

我们的智能指针就是为了解决这种场景在下面我们会详细分析智能指针的设计思路~

2024-12-22 22:32:51 901

原创 异常处理机制

C++标准库也定义了⼀套⾃⼰的⼀套异常继承体系库,基类是exception,所以我们⽇常写程序,需要在主函数捕获exception即可,要获取异常信息,调⽤what函数,what是⼀个虚函数,派⽣类可以重写。有时catch到⼀个异常对象后,需要对错误进⾏分类,其中的某种异常错误需要进⾏特殊的处理,其他错误则重新抛出异常给外层调⽤链处理。,程序的⼀部分负责检测问题的出现,然后解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。就可以把捕获的对象直接抛出。

2024-12-11 23:07:42 648

原创 c++11(内容十分干请耐心食用)

接着去构造两个临时对象然后拷贝构造给我们的参数,接着构造str,拷贝构造临时对象,最后拷贝赋值给ret。而编译器进行优化的点就是把构造拷贝构造优化为了直接构造,省略了临时对象,然后省略了str的构造,直接去构造临时对象,最后拷贝赋值给ret。包装器把我们一切可以调用的对象封装了,且bind在我们进行对一个类非静态成员函数进行包装时我们就可以用bind来绑定第一个参数,从而实现我们想要的效果再结合我们的function包装器来进行调用,极大地提升了代码的可读性。的fn可调⽤对象进⾏处理后返回⼀个可调⽤对象。

2024-12-02 23:25:59 992

原创 二叉搜索树

定义一个cur指针和一个parent指针;插入的key比cur指向的key大就往右边走cur走一次parent跟新知道cur为空此时判断parent的key和要插入的key的大小来决定插入左边还是右边。如果查找的key大于当前节点的key就去右边反之左边,相等返回该节点。直到cur为空还没找到就返回空指针。

2024-09-18 23:08:59 464

原创 c++之多态

必须满足继承条件调用的相同函数必须是虚函数该虚函数必须完成重写调用时应该用基类的指针或引用来接收基类或派生类的指针或引用;再根据指针具体指向谁去调用那个类的函数下面我们就通过题目来具体感悟一下多态关于虚函数说法正确的是( B)A.被virtual修饰的函数称为虚函数B.虚函数的作用是用来实现多态C.虚函数在类中声明和类外定义时候,都必须加虚拟关键字D.静态虚成员函数没有this指针a:被virtual修饰的成员函数称为虚函数c:虚函数在类中声明加在类外实现时不能加。

2024-09-17 22:37:52 970

原创 c++之继承

我们直接用一段程序来理解我们的继承public:// 进⼊校园/图书馆/实验室刷⼆维码等⾝份认证protected:string _name = "张三";// 姓名// 地址// 电话// 年龄public:// 学习// ...protected:int _stuid;// 学号public:// 授课//...protected:// 职称int main()Student s;Teacher t;return 0;

2024-09-15 21:41:23 756

原创 模版的进阶

如果我们把add这个模版定义和声明全部放在a.h中,首先.h文件展开在main.cpp说明模版的声明定义都有了接着把它实例化了;因此会有实例化函数的地址,这样在连接时就可以找到该函数了。这就属于没有完全相同基础模版的cosnt修饰的是a,b,而我们下面修饰的是*a,*b;偏特化并不仅仅是指特化部分参数,而是针对模板参数更进一步的条件限制所设计出来的一。因此我们不建议写成函数模版我们可以实现一个函数来完成特化的操作。全特化即是将模板参数列表中所有的参数都确定化。我们建议模版的声明和定义在一起。

2024-08-12 14:41:25 419

原创 【算法系列】双指针

常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。对撞指针:⼀般⽤于顺序结构中,也称左右指针。• 对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼近。• 对撞指针的终⽌条件⼀般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循环),也就是:◦ left == right (两个指针指向同⼀个位置)◦ left > right (两个指针错开)

2024-08-05 14:40:09 704

原创 stack与queue

deque成员就是两个迭代器以及一个存放buffer数组地址的数组迭代器里面也有四个指针分别指向每个buffer的开头结束以及当前得位置和当前buffer的地址存放在中控器的那一个位置(通过node指针)。

2024-08-05 10:44:42 551

原创 list的简单模拟实现

return tmp;= v.node;Node* node;class list//T是aapublic://这个是正常对象的迭代器//这个是const对象的迭代器private:Node* head;

2024-08-05 10:11:49 338

原创 vector简单模拟实现

【代码】vector简单模拟实现。

2024-08-01 09:16:06 236

原创 string的主要接口介绍和简单实现

1. 传统实现方法//默认构造函数//容量啥的都不算\0//拷贝构造//都是深拷贝如果不是会造成//1.会进行两次析构//2. 修改其中一个对象另一个也会变//自己与自己进行赋值//会造成我们把s中的str给this时进行字符串拷贝//地址会是不确定的if (this!= &s)~string()2. 现代版写法的实现//默认构造函数//容量啥的都不算\0//拷贝构造swap(tem);swap(s);~string()

2024-07-26 11:45:34 1065

原创 C++之模板

在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化和显式实例化。函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。

2024-07-20 21:08:44 268

原创 c++之内存管理

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;

2024-07-18 12:51:02 812

原创 类和对象(下)

成员变量都会走初始化列表,因为初始化列表是成员变量定义的地方,如果我们没有在初始化列表中实现,就会看成员变量有没有缺省值如果没有对内置类型是否初始化看编译器,对于自定义类型成员会调用默认构造函数,如果没有默认构造函数就会报错;内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使⽤,那么可以考 虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,其 他地⽅都⽤不了。如果⼀个类定义在另⼀个类的内部,这个内部类就叫做内部类。

2024-07-16 19:55:26 925

原创 c++类和对象(中)

4.若未显式定义拷⻉构造,编译器会⽣成⾃动⽣成拷⻉构造函数。⾃动⽣成的拷⻉构造对内置类型成 员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型成员变量会调⽤他的拷⻉构 造。5.像Date这样的类成员变量全是内置类型且没有指向什么资源,编译器⾃动⽣成的拷⻉以完成需要的拷⻉,所以不需要我们显⽰实现拷⻉构造。像Stack这样的类,虽然也都是内置类型,但是_a指向了资源,编译器⾃动⽣成的拷⻉构造完成的值拷⻉/浅拷⻉不符合我们的需求,所以需要我们⾃⼰实现深拷⻉(对指向的资源也进⾏拷⻉)。

2024-07-15 13:52:39 717

原创 c++之类和对象上

•class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。•为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。•C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是。

2024-07-12 20:59:31 994

原创 c++入门

定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。•namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。•C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响。

2024-07-10 21:18:51 1007

原创 二叉树OJ题

思路就是开动态开辟一个数组具体个数根据数的节点个数来定,注意这里在递归时要传递数组下标的地址。这里的思路就是把树的每一个节点当做新树的根节点取与另一棵树作比较,找到相同的就停止。对称二叉树就是比较一棵树的左子树与其右子树是否一样。二叉树便利我们根据注意应该传入数组的下标的地址。

2024-06-29 16:14:10 268

原创 栈和队列OJ题

思路分析:如果有左括号就进栈如果不是先判断栈里面是否为空如果为空返回false,如果不为空就进行匹配如果匹配不成功返回false反之继续下一个判断。

2024-06-16 11:08:29 570

原创 数据结构之排序算法

1.希尔排序是对直接插入排序的优化。2.当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。3.希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定《数据结构(C语言版)》--严蔚敏希尔排序的分析是一个复杂的问题,因为它的时间是所取"增量"序列的函数,这涉及。

2024-06-06 13:30:27 2139 2

原创 二叉树详解

的。

2024-05-29 16:31:37 885 1

原创 栈和队列的实现

这些接口的实现都不难入队就是尾插出队就是头删这里我们在出队时如果队里就一个元素此时的头尾指针指向同一个节点因此释放后应该把头尾指针都置为空指针。同时也避免我们想要改变头指针和尾指针的指向时传入二级指针可以直接通过栈这个结构来进行操作下面是栈的接口的定义。先进后出从栈顶入从栈顶出,出栈时不一定就是返过来的比如我们进1,2,3,4出栈也可能是1,2,3,4。队列是先入先出规定从队尾入从队头出,加入入的顺序是1,2,3,4则出的顺序一定是1,2,3,4。不一定就是4,3,2,1可以边入边出因此出栈顺序不一定。

2024-05-12 14:04:42 175

原创 链表与顺序表的比较

顺序表在物理上与逻辑上都是连续的链表在逻辑上连续物理不一定连续因此顺序表我们可以任意访问而链表不可以随机访问链表每次访问都要从头结点遍历。

2024-05-12 13:36:11 319

原创 链表经典面试题

1.删除链表中等于给定值的所有结点1.删除链表中等于给定值的所有结点2.反转一个单链表这里我们需要在原链表中进行操作我们定义三个指针如下图所示:接下来就是改变l2指针的next指向l1之后l1指针走到l2,l2走到l3,l3走到l2的next,不断循环一直到l2为空指针这里有一个小细节如下图。

2024-05-02 17:23:00 2774 1

原创 贪吃蛇的实现

Win32 API介绍。

2024-04-26 13:50:01 1013 1

原创 顺序表及动态顺序表的实现(c语言)

顺序表就是一个数组而已,只不过我们可以对这个数组进行增删查改的功能。

2024-04-05 22:22:46 1056 1

原创 写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

目录1.思路分析2.代码实现

2024-03-31 17:37:29 234 1

原创 c语言的编译与链接

2. 运行环境。

2024-03-30 13:32:59 580 1

原创 c语言的文件操作

磁盘(硬盘)上的文件就是文件,从文件的功能分有两种文件一种是程序文件,一种是数据文件fgetc,fputc,fgets,fputs,fscanf,fprintf这几个函数都是可以使用全部输入输出流,而fread,fwrite这几个函数只用在文件的输入输出流中。

2024-03-30 13:00:34 924 1

原创 c语言动态内存分配

首先我们看一下该函数的声明:这个函数就是向操作系统申请一块连续可用的空间单位是字节并返回申请空间的地址。

2024-03-25 15:11:20 1383 1

原创 c语言结构体

括号里面是我们的成员变量,外面的是我们的变量名是我们自己定的。假设描述一个学生我们就可以用结构体来实现。一个学生的姓名,年龄,体重如下代码所示这样我们就创建了一个结构体类型其中的name,age,weight就是成员变量,下面我们根据这个结构体类型创建一个变量并初始化。这样我们就创建了一个变量s1并对其初始化。

2024-03-20 17:15:06 520 1

原创 数据在内存中的存储

大小端字节序是针对超过一字节的数据在内存中存储时字节的排序⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。这就是我上图分析的那么到底是不是呢?我们来通过代码调试一下可以看到就是在Visual studio上就是小端存储。

2024-03-16 23:42:01 419 1

空空如也

空空如也

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

TA关注的人

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