自定义博客皮肤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】进程间通信

匿名管道不需要真的创建一个管道文件,直接复用文件系统中的系统级缓冲区来构筑信道进行通信。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。管道也是一种文件,管道的原理就是两个进程打开两个相同的文件,一个以写方式打开,将信息写入管道;管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。命名管道需要创建一个实体文件,不同的进程通过访问该文件而建立联系,进行通信。

2024-07-02 18:47:34 716

原创 【Linux】信号

从一个故事理解信号你在网上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时,你该怎么处理快递。也就是你能“识别快递”当快递员到了你楼下,你也收到快递到来的通知,但是你正在打游戏,需5min之后才能去取快递。那么在在这5min之内,你并没有下去去取快递,但是你是知道有快递到来了。也就是取快递的行为并不是一定要立即执行,可以理解成“在合适的时候去取”。在收到通知,再到你拿到快递期间,是有一个时间窗口的,在这段时间,你并没有拿到快递,但是你知道有一个快递已经来了。

2024-07-02 18:46:00 812

原创 【数据结构】平衡二叉树(AVL树)

二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查 找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年发明了一种方法,用以解决上述问题。一、AVL树概念AVL 树是一种平衡二叉树,得名于其发明者的名字( Adelson-Velskii 以及 Landis)。(可见名字长的好处,命名都能多占一个字母出来)。左右子树的高度差小于等于 1。其每一个子树均为平衡二叉树。

2024-06-06 20:30:56 963

原创 【数据结构】红黑树

AVL树虽然解决了有序数列插入时二叉树退化的问题,但因AVL树的高度差要求严格导致数据变动时树的旋转频繁,一定程度上降低了运行效率。为了降低运行效率降低程度,就有了红黑树。一、红黑树概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

2024-06-06 20:30:05 1726

原创 【数据结构】二叉搜索树

情况d:在它的右子树中寻找中序下的第一个结点(关键码最小),用它的值填补到被删除节点 中,再来处理该结点的删除问题--替换法删除。情况b:删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点--直接删除。情况c:删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点--直接删除。树不空,按二叉搜索树性质查找插入位置,插入新节点。d. 要删除的结点有左、右孩子结点。b. 要删除的结点只有左孩子结点。c. 要删除的结点只有右孩子结点。a. 要删除的结点无孩子结点。

2024-05-27 22:29:47 520 1

原创 【C++】set与map

比如:现在要建立一个英汉互译的字典,那该字典中必然 有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应 该单词,在词典中就可以找到与其对应的中文含义。: 比较器的类型,map中的元素是按照key来比较的,缺省情况下按照小于来比较,一般情况下(内置类型元素)该参数不需要传递,如果无法比较时(自定义类型),需要用户自己显式传递比较规则(一般情况下按照函数指针或者仿函数来传递):通过空间配置器来申请底层空间,不需要用户传递,除非用户不想使用标准库提供的 空间配置器。

2024-05-27 22:28:49 814

原创 【C++】类与对象——继承详解

如上面的继承关系,在Student和 Teacher的继承Person时使用虚拟继承,即可解决问题。菱形继承的问题:从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。派生类对象 可以赋值给 基类的对象 / 基类的指针 / 基类的引用。6个默认成员函数,“默认”的意思就是指我们不写,编译器会变我们自动生成一个,那么在派生类 中,这几个成员函数是如何生成的呢?当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。基类对象不能赋值给派生类对象。

2024-05-21 15:23:58 1183

原创 【C++】类与对象——多态详解

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。public:virtual void BuyTicket() { cout

2024-05-21 15:22:59 1071

原创 【Linux】语言级文件接口与系统级文件接口

每个编程语言都有自己的文件操作方法,在不同的操作系统下相同的语言有相同的文件操作方法。这是如何实现的呢?本文将通过讲述语言级文件接口与系统级文件接口的关系来回答这个问题。一、回顾C语言中的文件操作我们以C语言为例,我们先来简单回顾一下C语言中的文件操作。文件打开关闭//打开⽂件//关闭⽂件文件访问模式字符串含义解释若文件已存在的动作若文件不存在的动作"r"读打开文件以读取从头读打开失败"w"写创建文件以写入销毁内容创建新文件"a"后附后附到文件写到结尾创建新文件。

2024-05-16 18:52:00 635

原创 【Linux】通过EXT2文件系统理解Linux文件管理

在理解文件系统之前,我们先简单了解一下磁盘这个硬件,如下图。我们的磁盘是一个圆形结构,但是如果我们将磁盘拉展开来呢?所以我们可以将磁盘盘片抽象成一段线性的空间!假设我们的磁盘是两片四面的结构,那么我们就可以根据盘面将它抽象成一个具有四个区间的线性空间。接着我们继续已磁道对每个面进行划分,以扇区对每个磁道进行划分,就得到了如下图片:所以整个磁盘我们可以把它抽象成由无数个扇区构成的一个数组!即以扇区为单位大小的一个数组!

2024-05-16 18:51:41 741

原创 【Linux】进程控制

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行。进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力,因为谁也没有办法 杀死一个已经死去的进程。子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。exit()是语法级的进程退出函数,_exit()是系统级的退出函数。

2024-05-12 19:01:42 751

原创 【C++】栈和队列

栈和队列是STL中很重要的两个容器,栈的特点是先进后出;队列的特点是先进先出。还有优先队列,其特点为容器内数据出队列时为按其大小顺序出。本文将介绍着以上容器,并贴出模拟实现。一、stack一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

2024-05-12 19:01:25 531

原创 【C++】从list模拟实现深入理解iterator

在string与vector这类存储内存连续的容器中,iterator直接使用指针作为底层即可。但对于list这种存储内存不连续的容器,就不可能使用指针作为底层了。本文我们将通过对list的学习及模拟实现深入了解iterator。一、list节点类先创建一个链表节点类。(注:C++中struct和class相似,struct中所有默认为public成员)//节点类T _val;{}

2024-05-03 14:39:15 597

原创 【Linux】初识进程

它是操作系统对程序执行的基本单位,可以看作是程序在执行过程中的动态表现。每个进程都有自己的内存空间、代码、数据和执行状态。多个进程可以同时运行在计算机系统中。

2024-05-03 14:38:58 693 1

原创 【C++】vector常用函数总结及其模拟实现

vector容器,直译为向量,实践中我们可以称呼它为变长数组。使用时需添加头文件#include<vector>。vector使用时需添加数据类型进行模板实例化,如vector<int>。与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。

2024-04-24 22:49:58 959

原创 【C++】string常用函数总结及其模拟实现

在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)。C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。my_string class · 梁羽赫/cpp_basic - 码云 - 开源中国 (gitee.com)string拼接字符串。

2024-04-24 22:49:45 1045

原创 【Linux】快速学习make/makefile

通过以上内容,我们可以快速的写出一个实用的makefile文件。

2024-03-21 16:09:06 555

原创 Linux CentOS下使用man函数无法查询文档解决方法

这种情况为系统未安装有关于标准库函数的man pages,我们需要手动安装。遇到的问题:想用man 查看C标准库函数的man pages,输入命令。显示complete后即安装完成,man命令可以正常使用。bash命令行报错了。

2024-03-21 16:08:07 180

原创 【Linux】快速配置云服务器(学习用)

复制红框框选的语句,粘贴到下方,将最前方的用户名由root改为需要提权的用户。注意:勿在root下执行。

2024-03-11 22:10:45 306

原创 【Linux】vim编辑器

正常模式一般用于浏览文件,也包括一些复制、粘贴、删除等操作。这时击键时,一些组合键就是 vim 的功能键,而不会在文本中键入对应的字符。vim 是 Linux 系统上一款文本编辑器,它是操作 Linux 的一款利器。通过 vim,我们可以很方便的在Linux上完成对于文件的编写和修改。正常模式可以切换到其他模式,其他模式也可以切换到正常模式。

2024-03-11 22:10:04 984

原创 【Linux】文件传输工具lrzsz的安装与使用

这个工具使用了 XMODEM、YMODEM 和 ZMODEM 文件传输协议来实现文件的上传和下载的,目前主流的SSH连接工具 ( SecureCRT、XShell 等 ) 都支持这些协议。这时,一般都是使用 FTP 或者 WinSCP 工具进行上传下载, 虽然也能解决问题,但是这些工具需要在本地安装客户端并进行配置之后才能使用。这里介绍一款工具,它能秒级安装,安装即用,不需要任何的配置,就能方便快捷的在 Linux 和 Windows 之间传输文件。终端输入rz,在弹出窗口中选择需要的文件。

2024-03-05 09:28:43 1559

原创 【Linux】软件包管理器yum

在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上。

2024-03-05 09:28:23 603

原创 【C++】快速认识模板

如何实现一个通用的加法函数?为了解决这些问题,C++中引入了模板。

2024-03-04 14:58:49 245

原创 【C\C++】C\C++内存管理

有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时 候内存,我们⼀定会对内存的⼤⼩做灵活的调整。C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因 此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。通过malloc / calloc / relloc与free进行内存管理,使用这几个函数需包含头文件。这个函数向内存申请⼀块连续可⽤的空间,并返回指向这块空间的指针。

2024-03-04 14:58:28 2180

原创 【Linux】Linux权限

系统中的每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以对特定文件进行什么样操作。为了避免只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限这个问题,Linux增加了粘滞位这个概念。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。:chgrp [参数] [用户组名] [文件名]:chown [参数] [用户名] [文件名]chmod [参数] [权限] [文件名]修改文件或目录的所属组。

2024-03-01 11:12:14 2059

原创 【Linux】Linux常用指令介绍

cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前 不会加载整个文件。cp [选项] [源文件或目录] [目标文件或目录]mv [选项] [源文件或目录] [目标文件或目录]tail[必要参数][选择参数][文件]

2024-03-01 11:12:11 2236

原创 【Linus】初识Linux系统

Linux,是一种免费使用和自由传播的类Unix操作系统,是一种得到广泛使用的开源操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。

2024-02-28 18:54:29 759

原创 【C++】深入学习类和对象

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;内部类是一个独立的类, 它不属于外部类,更不能通过外部类的对象去访问内部类的成员。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访 问外部类中的所有成员。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

2024-02-28 18:42:33 726

原创 【C\C++】隐式类型转换

什么是隐式类型转换?借用标准里的话来说,就是当你只有一个类型T1,但是当前表达式需要类型为T2的值,如果这时候T1自动转换为了T2那么这就是隐式类型转换。int a = 0;// int 转换为 long// 默认的operator==需要a的类型和b相同,因此也发生转换一、隐式类型转换规则若参与运算量的类型不同,则先转换成同一类型,然后进行运算。转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。

2024-02-27 18:50:30 1741

原创 【C++】类对象的存储方式

int _age;类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?如何计算 一个类的大小?一、

2024-02-27 09:50:04 373

原创 【C++】类的常见成员函数

int _month;int _day;d1.Print();Date d2;d2.Print();return 0;对于Date类,可以通过 Init 公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置 信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?

2024-02-26 18:33:58 1926 1

原创 【C++】快速了解类和对象

/ 类体:由成员函数和成员变量组成//注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分 号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量,类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内 联函数处理。//声明和定义全部放在类体中public:private:char* _sex;int _age;

2024-02-26 15:55:50 617 1

原创 【C++】C++的部分新特性

为了解决C语言使用过程中的一些问题,C++提出了许多新特性,本文将介绍C++区别与C语言的一些零散的新特性。一、缺省参数缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。// 没有传参时,使用参数的默认值Func(10);// 传参时,使用指定的实参return 0;缺省参数分类全缺省参数半缺省参数1、半缺省参数必须从右往左依次来给出,不能间隔着给。

2024-02-21 23:51:44 985

原创 【C++】命名空间

在编程过程中,我们需要对大量的函数、变量进行命名。当单人写一个较小的项目时,我们可以避免出现命名冲突的情况;但当我们多人协作去完成一个大型项目时,命名冲突的情况就难以避免。为了解决这一问题,C++提出了命名空间(namespace)这一概念。下面我们就来详细了解一下命名空间。一、关于定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。1、命名空间可以定义变量、函数、结构体int a = 10;int b = 20;int val。

2024-02-21 01:39:43 513

原创 【数据结构】二叉树

二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。

2023-12-29 17:24:58 831 1

原创 【数据结构】栈和队列

栈和队列是两个分别以顺序表和链表为底层的数据结构。栈对其中数据遵循先入后出的原则,队列对其中数据遵循先入先出的原则。

2023-12-28 19:30:20 829 1

原创 【数据结构】顺序表和链表

顺序表与链表都属于线性表,二者均在逻辑上是线性结构,也就说是连续的一条直线,但是在物理内存上并不一定是连续的。其中,顺序表一般以数组来存储数据,链表则定义一种结构体形成链式结构来存储数据。一、顺序表。

2023-12-28 18:03:38 928 1

原创 浅析时间复杂度与空间复杂度

在数学中,我们常用简洁来评价一个公式,爱因斯坦的质能守恒公式就是其中的典型。但对于一个算法,简洁就是好吗?我们该如何衡量一个算法的好坏?一、如何衡量一个算法的好坏?我们将其放入编译器内试着运行一下当我们计算第十个斐波那契数Fib(10),程序运行良好;但当我们计算第五十个斐波那契数Fib(50)时,程序一直无结果。这就是该算法时间复杂度过大的原因。我们一般用时间复杂度和空间复杂度衡量一个算法的好坏,下面进行详细介绍。

2023-11-05 16:49:27 45

原创 C语言中的文件操作

初学C语言时,我们常用的是scanf与printf函数及与之对应的键盘、显示器进行输入输出。这种方式在初学C语言时尚且可以,但后续一旦需要大规模输入输出数据,这种方式就力有不逮,这就需要用到文件操作了。如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。下面本文将详细介绍C语言中的文件操作。一、什么是文件。

2023-10-12 11:09:15 33

原创 编译和链接详解

return 0;写下这几行代码后,我们简单的点一下运行就可以在屏幕上打印出“Hello world!”这行语句。事实上,visual studio、gcc等开发工具帮我们省略了后续一系列过程,上述代码的运行过程可以分成预处理、编译、汇编链接四个步骤,下面我们就详细介绍以下四步。一、预处理在预处理阶段,源文件和头文件会被处理成为.i为后缀的文件。预处理阶段主要处理那些源文件中#开始的预编译指令。将所有的 #define 删除,并展开所有的宏定义。

2023-10-02 20:01:38 167 1

空空如也

空空如也

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

TA关注的人

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