自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 位图 bitset

N是一个非类型模板参数,表示这个。

2025-03-16 21:13:02 576

原创 C++ unordered_map && unordered_set 模拟实现

移动之后,不为空,说明这个哈希桶(单链表)还没有走完,那么直接返回这个节点即可。下面,我们就通过之前写的基于开散列(哈希桶)的代码,来封装出一份简单的。因此,为了符合规范,我们需要对原先哈希表部分函数的返回值进行修改。,为第一个不为空的哈希桶中的第一个节点;移动之后,为空,说明这个哈希桶(单链表)已经走完了。的接口都是直接调用其内部封装的哈希表的接口。在上面的哈希表代码中,我们直接使用的就是。由于哈希表自己不知道存储的数据到底是。对于哈希表的迭代器,我们只需要关注。:表示要存放什么类型的数据。

2025-03-15 19:20:17 572

原创 C/C++哈希(散列)

哈希函数是哈希技术的核心,它是一个。

2025-03-14 16:26:40 764

原创 Linux——信号signal

如果不想让系统执行信号的默认动作,可以通过系统调用来对指定信号进行自定义捕捉处理signum:信号编号handler:函数指针,指向自定义处理信号的函数返回值:如果错误,返回SIG_ERRint main()//捕捉2号信号,并对其进行自定义处理handlerwhile (1)sleep(1);return 0;运行效果:可以看到,由于我们对2号信号进行了自定义捕捉处理,在进程收到了2号信号后,不会进行默认动作(退出进程),而是按我们定义的方式handler来进行。

2024-12-04 10:43:55 810

原创 Liinux——进程间通信之共享内存与信号量

system V 进程通信是一组在 Unix 和类 Unix 系统中用于进程间通信的机制,主要三种方式:共享内存、消息队列与信号量今天我们一起来对共享内存进行详细的学习,并了解信号量的基本概念我们常说:进程间通信的本质实际上就是让不同进程看到同一份资源。在之前,我们学习了基于文件的进程间通信(管道),今天,我们来学习基于内存的进程间通信:我们可以在物理内存申请一块空间,然后让两个不同的进程通过页表的映射将这个相同的物理内存映射到自己的虚拟地址空间,这样,这两个不同的进程就看到相同的内存资源了。如图:同时我们

2024-11-28 21:32:44 1027

原创 Linux——进程间通信之管道

对于这个问题,答案显而易见:一个进程必然不能解决所有的问题,系统中往往需要多个进程的协作来进行工作,而进程间的协作就需要进程之间进行信息的交互,这个过程也叫做进程间的通信。可以看到:在服务端(读端)打开到客户端(写端)未打开的这段时间中,服务端(读端)并没有打开管道文件,而是等客户端(写端)启动后,再打开的管道。这样,就可以通过子进程向公共文件写数据,父进程向公共文件读数据的方式,进行父子进程之间的通信了。同时也可以推出,在博主所用的系统中,,关闭父进程的读(写)端,关闭子进程的写(读)端,就可以。

2024-11-23 21:33:22 988

原创 Linux——软硬链接与动静态库

建立软链接的命令:例如我们以给一个文件建立的软链接为例,看看这个软链接和被建立链接的文件有什么不同:可以发现,当我们查看二者的inode时,它们的inode编号是不一样的,这说明了以下几点:那么,软链接存放的究竟是什么呢?通过上面的分析,可以得出结论:同时,我们发现,上面的快捷方式指向的文件实际是在,而一般来说,放在电脑桌面的快捷方式是存放在的,而同样在Linux——磁盘文件中提到过,一个分区就是一个文件系统,因此又可以得出一个结论:建立硬链接的命令:例如:同样,我们来查看硬链接和被链接文件的:可以看到,硬

2024-11-18 18:57:27 894

原创 C++——红黑树

/定义一个枚举类,用于表示颜色enum ColorRED,BLACK//默认该红黑树的存储模型为key_value型//节点默默的颜色为红色: _kv(kv){}

2024-03-27 18:27:46 1052

原创 C++——AVL树

看到这里,相信大家已经对AVL树的结构和特点有了较为深刻的了解,对于AVL树的其他操作,例如删除节点erase(),这里不再讲述,如有兴趣大家可以自行研究。//bf为平衡因子,即[右子树高度 - 左子树高度]: _kv(kv){}public://找到插入位置else//连接新节点else//更新平衡因子,调节搜索二叉树的平衡elsebreak;elsebreak;

2024-03-17 13:20:35 934 1

原创 Linux——磁盘文件

通过前一篇文章,我们知道了如何对加载在内存中的文件进行读写等操作,并了解了其内在的原理。同时我们也应该清楚,并不是所有的文件都会被加载入内存,而没有被加载入内存的文件,就被存放在磁盘中,称为磁盘文件。现在,就让我们一起来学习磁盘文件的相关知识本片思维导图:注:本章思维导图对应的.xmind和.png文件都已同步导入至,供免费查阅。

2024-03-12 20:16:52 1393 1

原创 二叉树遍历(前中后序的递归/非递归遍历、层序遍历)

如上图中:A -> B -> C -> NULL -> NULL -> D -> NULL -> NULL -> E -> NULL -> NULL。

2024-03-09 22:05:25 2274 1

原创 C++——搜索二叉树

本章思维导图:注:本章思维导图对应的.xmind和·.png文件都已同步导入至,可供免费查阅。

2024-02-21 19:02:57 963 1

原创 Linux——系统文件I/O

注:学习本次内容之前,最好先对有所了解本章思维导图:注:思维导图对应的.xmind文件和.png文件都已同步导入至,可供免费查阅在以前学习的C语言中,我们可以通过fwrite和fread等各种库函数对系统文件进行读写操作。同时也应该注意到,C语言作为一种用户级语言,其可以利用库函数对系统的底层数据进行各种操作,这个过程中一定会经过操作系统的处理,因此我们可以确定。今天我们就要来学习有关文件操作的系统调用及其背后的细节。

2024-02-16 10:06:01 1339 1

原创 C++——多态

本篇所有的测试代码都是在VS2019的x86环境下运行的,所涉及的指针都是4字节指针。不同环境可能会有所不同。

2024-02-12 17:25:12 853 1

原创 C++——继承

派生类 : 继承方式 基类公有继承public、保护继承protected、私有继承private在日常使用中,一般只会使用public公有继承由于基类成员访问限定符和继承方式二者的相互影响,派生类在继承了基类成员后,继承成员的权限会发生这样的变化:类成员/继承方式public继承protected继承private继承基类的public成员派生类的public乘员派生类的protected成员派生类的private成员基类的protected成员派生类的protected成员。

2024-02-10 08:00:00 977 1

原创 C++泛型编程——模板

注:本章思维导图对应的和文件都已同步导入至资源在C++中,如果我们不借助库函数,要实现两个数据的交换函数,由于要考虑到数据类型的多样性,我们难免要将函数重载很多次,例如:函数的函数体基本相同,只有交换数据的类型不同,但就是由于这个小小的不同迫使我们产生很多冗余代码,使生产效率变得低下为了解决这一问题,C++就支持了泛型编程这一概念:在C++中,泛型编程就是靠模板来实现的基本格式为:基本格式为:例如:注意:用不同的类型使用函数模版生成一个具体的函数这一过程叫做函数模板的实例化,函数模板的实例化有以下两种方

2024-02-08 08:00:00 1478 1

原创 C++适配器——stack && queue

本章思维导图:注:本章思维导图对应的.xmind和.png文件都已同步导入至,可免费查看。

2024-02-06 19:31:22 777 1

原创 C++——list的使用及其模拟实现

作为标准模板库中的容器,list同样也是一个类模板如果要定义一个list对象,就需要指定其存储的数据类型T。list

2024-01-28 11:32:30 1896 1

原创 Linux——shell程序的简单实现

本章思维导图:注:本章思维导图对应的.xmind和.png文件都已同步导入至,可免费查阅在学习完有关进程的知识后,我们就可以开始尝试自己实现一个简单的shell程序了。注:在编写简单的shell程序之前,你首先需要掌握:👉👉👉。

2024-01-25 20:39:11 1579

原创 Linux——进程程序替换

本章思维导图:注:本章思维导图对应的.xmind和.png文件都已同步导入至,供免费查阅。

2024-01-23 17:32:31 1159

原创 C++——vector的使用及其模拟实现

是一个迭代器,其指向原始数据的某一个位置。但是如果要进行扩容操作,由上面的分析可以知道,如果要进行扩容,那么。因此,为了避免迭代器失效带来的影响,我们得遵循以下原则。vector的尾插就和顺序表的尾插一样,就是在最后面新增一个数据。的空间,再将原来的数据复制过来,最后再释放原来的空间。这种内置类型呢,难道它们也有自己的构造函数吗?答案确实如此,为了适应类和对象,我们可以认为。这种自定义类型好说,他们有构造函数,但如果。竟然在插入的时候就出问题了,这是为啥?可以看到,这段代码的逻辑是:先。

2024-01-20 22:34:05 1019

原创 Linux——环境变量与本地变量

本章思维导图:注:本章思维导图对应的.xmind和.png文件都已同步导入至。

2023-12-24 15:25:54 1420 1

原创 Linux——进程地址空间与进程控制

通过上面的讲解,我们知道,要知道代码是否出异常,就需要知道它的异常信号码,要知道它的运行结果是否正确,就需要他的进程退出码。因此,如果想要知道一个进程的执行情况进程退出码和异常信号码。

2023-12-14 18:00:32 1156

原创 Linux——操作系统与进程的基础概念

本章思维导图:注:思维导图对应的.xmind和.png文件都已同步导入至。

2023-12-07 11:09:29 1296

原创 冯诺依曼体系结构

本章思维导图:注:本章思维导图对应的.xmind和.png文件都已同步导入至。

2023-11-30 23:53:21 555

原创 C++STL——string类详解及其模拟实现

STL全称,译为下面展示STL的六大组件:本章,我们将对string部分常用的功能进行说明和使用,最后对string进行简单的模拟实现本章思维导图:注:本章思维导图已经同步导入至。

2023-11-27 15:44:01 1464

原创 Linux——编译器gcc/g++、调试器gdb以及自动化构建工具makefile&&make详解

我们可以用。

2023-11-19 23:44:52 1150 2

原创 C++——内存管理(new/delete使用详解)

所以C++才要新创建两个运算符。

2023-11-14 16:34:03 736

原创 Linux——vim简介、配置方案(附带超美观的配置方案)、常用模式的基本操作

vim是Linux常用的文本编辑器,每个Linux账户都独有一个vim编辑器本篇我们介绍vim命令模式(command mode)、底行模式(last line mode)、插入模式(insert mode)

2023-11-12 21:21:08 11516 8

原创 Linux——手把手教你解决sudo指令无法使用的问题

sudorootroot但是,如果是新创建的普通账户,一般来说一开始是不能执行sudosudoerssudosuduersrootsudosudoerssudorootsudoersroot。

2023-11-10 14:04:55 12841

原创 C++——类和对象(初始化列表、匿名对象、static成员、类的隐式类型转换和explicit关键字、内部类)

但也不是说初始化列表就能完全替代函数体。因为有时候函数体需要进行检查等操作。

2023-11-07 20:04:00 225

原创 分治法——找众数

要利用分治法找众数,首先就先要使数组有序。这里,我们用C语言库中的。语句没有执行,那就说明。就是最大的,那就需要和。注:本题已通过牛客网。

2023-11-05 20:56:38 1911

原创 C++——类和对象之运算符重载

应该清楚,赋值实际上也是一种拷贝。浅拷贝又称值拷贝浅拷贝只是对成员变量值的简单复制,而不是复制指向的动态分配的资源(如堆内存)原对象和拷贝对象将共享相同的资源。深拷贝又称址拷贝相较于浅拷贝只是对成员变量值的简单赋值,深拷贝会复制对象的成员变量以及指向的资源,包括指针指向的数据这确保了原对象和拷贝对象拥有彼此独立但内容相同的资源副本。关于深浅拷贝更为清楚的解释请移步👉C++——拷贝构造既然拷贝分为深浅拷贝,那么我们的赋值运算符重载也应该分为值拷贝、址拷贝例如对于Date类,

2023-11-04 23:36:53 214

原创 C++——类和对象之拷贝构造

要知道如何正确的定义拷贝构造,就需要先对浅拷贝和深拷贝。

2023-11-01 00:03:03 236

原创 C++——类和对象(构造函数与析构函数)

构造函数没有返回值(不需要写void构造函数的函数名与类名相同构造函数支持函数重载构造函数可以没有形参,形参可以都是缺省参数,也可以不是缺省参数例如,对于Dateclass Datepublic ://方式一:_day = day;//方式二:Date()_day = 30;//方式三:_day = day;int _month;int _day;一般建议将构造函数的形参设置为全缺省参数析构函数的函数名为析构函数没有返回值。

2023-10-30 17:58:54 132

原创 Linux——文件权限属性和权限管理

本章思维导图:注:本章思维导图对应的Xmid文件和.png文件都以传到“资源”

2023-10-28 16:00:30 880 2

原创 C++——类和对象(了解面向过程和面向对象、初步认识类和对象、类大小的计算、this指针)

在C语言中,我们有struct类型,我们称之为结构体。int* st;int top;但是,C语言的结构体有如下的局限性定义结构体变量时,类型名太长。例如我们要定义上面的结构体类型的变量st1结构体内只能声明变量,而不能声明和定义函数可以在struct里面声明和定义函数。_top = 0;exit(-1);_st = tmp;//仅为了展示C++struct里面可以声明和定义函数//故其他功能不做展示int* _st;int _top;在C++中,我们就称用。

2023-10-26 21:49:11 212

原创 Linux新建用户、删除用户以及用户之间的切换

学习之前,我们需要了解一个Linux的基本常识:Linux系统root超级管理员非root普通用户在Linux系统的目录中,root账户有一个专门的目录/root,而所有的普通账户的目录都存放在家目录/home中。

2023-10-25 23:24:26 2524 2

原创 C++特性——auto关键字、范围for、指针空值nullptr

本篇是关于C++特性的最后一篇。在前面我们学习了C++引用、I/O流、inline内联函数等诸多特性。如果感兴趣,可以看看:👉C++特性——命名空间、I/O流以及缺省参数👉C++特性——引用与指针详解👉C++特性——inline内联函数在写代码时,我们常常会遇到定义变量时变量的类型名太长的情况,例如:我们发现,变量、的类型名实在是太长了,有没有什么办法解决呢?C++引入了这个关键字来解决这个问题。关键字可以自动识别变量的类型。例如:output:1.2 关于auto关键字的细节使用关

2023-10-24 13:40:09 235

原创 C++特性——inline内联函数

inline内联函数是C++专门针对C语言宏函数的缺陷而设计的。其既具有宏函数没有函数调用开销,所耗时间少的优点;同时也基本上解决了宏函数不安全、难以调试的缺点。其功能不可谓不强。然而内联函数也有较大的局限性:其只适用于代码简单、且频繁调用的函数。而对于递归、有大量循环的函数则不适用。内联函数只是对编译器的一个建议,到底才不采用取决于编译器。内联函数的声明和定义最好放在一起。

2023-10-21 20:26:58 286

C++思维导图Xmind文件和.png文件(持续更新)

C++思维导图Xmind文件和.png文件: 构造函数与析构函数思维导图Xmind文件和.png文件 拷贝构造思维导图xmind文件和.png文件 运算符重载思维导图xmind文件和.png文件 初始化列表、匿名对象、static成员、类的隐式类型转换和explicit关键字、内部类思维导图xmind文件和.png文件 内存管理(new/delete使用详解) 模板——初识 STL——string类 STL——vector STL适配器——stack && queue STL——list C++——继承 C++——搜索二叉树 C++——AVL树 C++——红黑树

2023-10-30

Linux知识点思维导图(持续更新)

Linux——文件权限属性和权限管理 Linux——vim简介、配置方案(附带超美观的配置方案)、常用模式的基本操作 Linux——编译器gcc/g++、调试器gdb以及自动化构建工具makefile&&make详解 Linux——冯诺依曼体系结构 Linux——操作系统与进程 Linux——进程地址空间与进程控制 Linux——环境变量与本地变量 Linux——进程程序替换 Linux——shell程序简单实现 Linux——系统文件IO Linux——磁盘文件

2023-10-28

空空如也

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

TA关注的人

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