- 博客(46)
- 收藏
- 关注
原创 Linux下的Git的上传(版本控制器)
当然我们在Windows下知道怎么远程上传我们的代码到gitee但是在Linux下的代码我们怎么上传到远程呢?这就是我们今天的内容这篇文章讲解了怎么在linux下上传我们的代码!!之后会讲解怎么在Linux调试代码。
2026-05-10 16:39:54
95
原创 C++模板进阶
在之前的文章中我们初步了解了C++模板的使用知道了函数模板 类模板今天我们来进一步了解一下这个模板的使用本文围绕 C++ 模板核心内容展开,涵盖非类型模板参数、模板特化与模板分离编译三大板块。非类型模板参数允许模板接收编译期常量,拓展了模板的使用场景。模板特化分为函数模板特化与类模板特化,其中类模板特化包含全特化与偏特化,前者针对特定类型,后者可适配指针、引用等泛化形态或部分参数固定的场景,而函数模板特化在工程中多被重载替代。
2026-05-10 11:29:31
152
20
原创 基础的开发工具(2)---Linux
在之前的开发工具介绍的文章中我们简单的了解了怎么在Linux下下载软件也就是yum的使用和vim的使用和配置接下来我们进一步来了解Linux的开发工具这篇文章主要讲解 C/C++ 开发基础流程,核心内容如下:介绍gcc/g++编译器,拆解代码从预处理、编译、汇编到链接的完整过程,区分静态链接与动态链接,讲解动静态库概念;同时讲解make工具与Makefile自动化构建,包括目标执行规则、修改时间判断逻辑及$<$@等自动化变量的用法之后还会讲解开发工具的使用!!
2026-05-06 20:29:11
585
22
原创 list模拟实现
在之前的文章中,我们学习了C++库中的list接口的使用,今天我们来了解一下库中的list是怎么实现的,并且我们来模拟实现一下简单的list的接口本次内容围绕 C++ 手写链表展开,从节点类、迭代器类的基础实现,到链表类的封装(含构造 / 析构、容量接口),再到核心操作 insert、erase、clear 的实现逻辑,完整复刻了 STL 链表的核心框架。在之后我们会来了解怎么来封装堆,栈,队列.!!
2026-05-04 11:18:27
498
13
原创 list 接口拆解:我踩过的坑,帮你避开
在数据结构中我们学习了链表的相关的语法知识,并且我们用了C语言模拟实现了这个数据结构但是我们在C++中还是需要来学习一下在C++库中的链表是什么样子的,并且我们来模拟实现一下这个结构本章节聚焦std::list的核心修改接口,系统梳理了链表节点增删、替换与重组的各类操作。从基础的头尾插入删除push/pop,到迭代器区间操作,再到链表专属的splicemergesort等高级功能,完整覆盖了 STL list 容器的修改能力。之后我会模拟实现一下这个链表.!!
2026-04-29 20:16:46
392
13
原创 基础的开发工具(Linux)
在之前的文章中我们简单的了解了Linux的指令和有关权限的知识,有了基本的指令作为我们的基础我们就来认识一下Linux的开发工具今天我们先来了解其中的两个就是yum和vim以上就是今天的内容了,之后会继续讲解开发工具的使用!!
2026-04-28 23:18:54
1291
6
原创 Linux指令进阶 面试必看:Linux的权限
在Linux的上篇文章中我们了解到了怎么在我们的电脑上远程登录上Linux操作系统并且学习了一些基础的指令.今天我们来进一步的学习指令并且理解一下Linux的权限的相关知识我围绕指令与权限两大核心模块,梳理了日常高频操作要点。指令部分覆盖文件操作、文本查看、压缩传输、系统工具等常用命令,提炼了典型场景用法;权限部分聚焦chown命令与umask缺省权限机制,理清权限屏蔽逻辑与系统硬规则之后会讲解Linux下的开发的工具!!
2026-04-24 13:16:40
473
11
原创 剖析vector底层代码 模拟实现vector
在之前我们详细的介绍了C++库中的vector的使用,今天我们来自己实现一下这个vector的容器,并且提供几个经常使用的接口本次实现了一个简易版的 C++vector,以动态数组为底层结构,通过_begin_end三个核心指针管理内存与元素。实现了迭代器、构造 / 析构函数,以及clearsizecapacityoperator[]等基础接口。核心难点在于reserve的内存扩容、resize的元素初始化,以及inserterase。
2026-04-22 13:15:35
419
12
原创 Linux使用指南和基础指令(1)
Linux 是如今主流的操作系统,要聊它的历史,必须先从 Unix 说起 ——Linux 正是受 Unix 设计理念启发而来的类 Unix 系统。早年想要使用成熟的操作系统,大多只能选择闭源商用的 Unix,不仅收费高昂,还无法自由修改。于是,林纳斯・托瓦兹参考 Unix 的设计思想,从零独立编写了一套操作系统内核,并选择完全开源、免费共享,让所有人都能自由使用与改进。,既致敬了源头,也强调了它是独立全新的系统。
2026-04-20 13:01:49
1360
11
原创 STL库(vector)逐步分析vector( 包含常用的接口的使用讲解)
在之前的文章中我们了解了string的使用和模拟实现,他对应的是在C语言中的字符串数组,今天我们要学的是这个vector就是可以理解为可以存储各种类型的数组以上就是今天的所有的内容:之后会模拟实现一下这个vector的常用的接口和函数!!
2026-04-17 15:14:28
479
7
原创 深剖string内部结构 手撕string
在前面我们知道了在标准库中的string的各种接口和使用的方法,今天我们就来接触一下底层,来模拟实现一下这个string的类。
2026-04-16 15:21:46
477
7
原创 STL库: string类
为什么要学string库,在我们的C语言中我们可以用数组来存储字符串,那么我们为什么要学一个string类呢??那是因为我们在C语言中的用起来特别的麻烦但是在我们的string中我们会感到无与伦比的畅快.下面我们直接来看一下我们的string库中的给我们的接口和函数在讲解的之前我们先来认识一下 auto和范围for内容围绕 C++string类核心接口展开,先铺垫auto与范围for两大 C++11 语法糖,再系统梳理string的常用操作:涵盖构造、容量管理(sizeresizeclearempty。
2026-04-12 18:05:43
493
8
原创 C++内存管理 C++模板
本部分系统梳理了 C++ 内存管理与模板两大核心知识。内存管理模块对比了 C 与 C++ 的内存管理方式,解析了 new/delete 的底层实现原理,明确了其与 malloc/free 的核心区别,总结了 C++ 内存管理的特点,为安全高效的内存操作奠定基础。模板模块从基础认知切入,详解了函数模板的概念、格式、原理与实例化方式(隐式 / 显式),明确了函数模板与非模板函数的匹配规则,同时涵盖类模板相关内容,体现了模板的泛型编程思想,实现代码复用与类型安全.
2026-04-08 14:05:41
479
10
原创 类和对象----最终篇
在前面我们介绍了类和对象的基础的语法知识,我们初步了解了类的构造函数,析构函数,和函数的重载等等,今天我们来对类和对象收 个尾.本次内容围绕 C++ 类与对象核心知识点展开。再探构造函数,明晰其初始化与对象创建的作用;掌握类型转换规则,理解隐式与显式转换的差异与应用。static 成员为类所有,实现数据共享与独立访问,突破对象限制。友元打破封装,让外部函数或类可访问类私有成员,需谨慎使用。内部类可直接访问外部类私有成员,私有内部类能有效隐藏实现细节,强化封装。
2026-04-06 11:19:55
415
8
原创 类和对象(C++)---中
在之前我们初步了解了类和对象的知识,浅浅的了解了类的函数,内存大小,this指针等知识点.今天我们更进一步的了解类和对象.通过本文我们了解到默认成员函数简化了类的设计,但需根据实际需求定制。构造函数确保对象初始化,析构函数管理资源释放,拷贝构造和赋值运算需区分浅/深拷贝以避免问题。合理重载运算符能提升代码可读性和安全性。希望我的文章能帮到你进一步理解C++的语法,后面我会继续讲解C++类和对象的最后的篇章!!
2026-03-30 22:59:03
440
9
原创 类和对象(C++)---上
就以下面的代码为例子Class是类定义的关键字.Date是类的名称.{}中包含的是类的主体部分,需要注意的是类最后的分号是不能省略的.类中的内容我们称为类的对象,在类中我们可以定义变量也可以定义函数,在类中定义的函数我们称为成员函数,在类中定义的变量我们成为成员变量,或者是类的属性.为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加或m开头,注意C++中这个并不是强制的,只是⼀些惯例.就比如在这里我使用的是_
2026-03-28 16:33:38
471
11
原创 [蓝桥杯 2014 省 AB] 蚂蚁感冒
今天在写题的时候遇到了这道题,觉得这道题虽然只是一道模拟实现的题型,但是我觉得他的解题思路十分的震惊我,所以我来分享一下这道题的题解,以及思路.
2026-03-21 17:48:17
378
6
原创 第一章:C++入门基础--- c++入门门槛高? 逐步剖析c++语法 成为c++大师
定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2026-03-17 19:28:58
859
4
原创 每日一题Day6(递归专栏---FBI数)
今天我们将要学习地算法是递归.提起来递归大家一定不会陌生,因为我们地二叉树 快速排序,归并排序.....都使用了递归.那么我们要怎么借助递归来解决问题呢?我们来看使用递归地场景.以我们地dfs为例.我们想要前序遍历这棵二叉树,即左子树---根---右子树.我们会发现我们在解决这个问题时我们先访问根的左子树在访问左子树地左子树,来看dfs的逻辑,我们设计dfs函数后我们想要使用递归来解决,既然如此那我们就认定这个dfs函数一定能够解决我们的问题,所以我们只需要写遍历的逻辑就可以了.
2026-03-16 09:33:59
391
3
原创 每日一题Day5(离散化模板+贴海报)
今天我们来学一个新的算法那就是:离散化数据.什么是离散化数据呢?不知道大家知不知道计数排序这种排序方法.不知道也无所谓当题⽬中数据范围很⼤,但是数据的总量不是很⼤,并且我们需要⽤数据的值来映射数组的下标时, 我们就可以⽤离散化的思想先预处理⼀下所有的数据,使的每⼀个数据都映射成⼀个范围较⼩的值。⽐如:[9, 99, 9999, 999999] 离散之后就变成[1, 2, 3, 4]。在这样的处理的情况下我们就实现了离散化.但是为什么要这样做呢,我们来看下面的一个场景.
2026-03-14 15:05:16
447
1
原创 每日一题 Day3(哈夫曼编码)
最小路径和通常指在树或图中,从根节点到叶子节点的路径中,所有节点权值之和最小的路径。在哈夫曼树中,权值越大的节点离根节点越近,权值越小的节点离根节点越远,因此高频字符的路径较短。频率高的字符用较短的编码,频率低的字符用较长的编码,从而减少总编码长度。每次从队列中取出两个最小权值的节点,合并为一个新节点,新节点的权值为两者之和。所以我们要想得到一个最优的二叉树就需要让深度高的节点的权重少,而权重高的深度低一点.在我们遇到这种的哈夫曼编码的题目的时候,我们就直接套用就可以了.一般这种的题目很容易分辨的。
2026-03-11 12:45:43
393
原创 每日一题 Day(1)跳石头
下面在讲解今天的算法题目的时候,我来想说明一下这个专题的讲解前提.首先我会对这道题进行分析,然后讲解算法原理,最后讲解代码是怎么实现的.
2026-03-09 13:27:20
369
原创 <蓝桥杯必看>二叉搜索树 (平衡二叉树--红黑树)包含(set map的使用)
在这篇文章我们只会对平衡二叉树,红黑树的实现简要的说明,并不会对他进行详细的讲解.我们只需要了解他的背后的原理即可,我们需要掌握的是set和map的使用• 若左⼦树⾮空,则左⼦树上所有结点的值均⼩于根结点的值。• 若右⼦树⾮空,则右⼦树上所有结点的值均⼤于根结点的值。• 左、右⼦树也分别是⼀颗⼆叉搜索树。也就是左⼦树结点值总的来说就是这样左子树<根<右子树因为这种的特殊的数据结构,所以在中序遍历的时候,我们输出的数据就一定是升序的.下面我们来看一些二叉搜索树.
2026-03-04 19:48:23
387
2
原创 (蓝桥杯竞赛必看)堆的实现 (包含经典例题)
堆需要满⾜以下性质:1. 是⼀棵完全⼆叉树;2. 对于树中每个结点,如果存在⼦树,那么该结点的权值⼤于等于(或⼩于等于)⼦树中所有结点 的权值。如果根结点⼤于等于⼦树结点的权值,称为⼤根堆;反之,称为⼩根堆。(2)堆的存储由于我们知道堆是一个完全的二叉树,所以我们可以利用顺序存储的方式来存储这个数据结构下面我们实现的都是一个大根堆。
2026-02-23 12:33:33
649
1
原创 (竞赛必看)二叉树的实现(包含经典的算法题)
但是我们在这里我们需要找出宽度最大的一层,所以我们在实现的时候我们需要先入队列根节点>出根节点>入根节点的孩子>统计队列的大小并记录>出队列同时入队列孩子并且将记录的数据减减直到为零t>在统计队列的大小记录最大值.......直到这棵树被我们遍历完我们就可以求出最大值了.下面我们用同样的方式让目标的节点回归根节点,如果遇到了一个节点上有标记那么这个就是拐弯的点.我们想知道节点间的距离,并且向根节点的距离和面向目标节点的权重不同.这样我们就实现了再回归根节点上的节点的距离的标记.
2026-02-19 22:35:26
664
1
原创 排序专栏( 包括时间复杂度讲解)
堆是一棵完全二叉树(所有层除最后一层外都满,最后一层节点靠左排列)。这一特性使得堆通常用数组高效存储。下面我们来建造一个大堆.什么是大堆就是每一个父节点都大于他的子节点.
2026-02-11 10:51:22
607
2
原创 数据结构->链表篇
我们把每个数据看作每一个车厢,如果没有连接车厢的装置的话,那么每个车厢就是独立的.我们通过记录下一个节点的地址实现每个节点的链接.我们通过上面的图可以知道我们的每组数据。纵使有这么多的类型但是使用率最高的是。data表示的这个节点存储的数据.next存储的是下一个节点的地址.所以我们先要找尾节点.
2026-01-11 15:46:21
1316
原创 顺序表(知识点大全)
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改。顺序表也分为静态的和动态的.
2026-01-07 17:00:36
657
原创 动态内存管理
2. free我们知道通过malloc函数开辟的空间是在堆上面开辟的,在我们使用过后我们需要对我们开辟的空间进行释放,否则就会造成内存泄漏.那么我们就需要使用free函数完成这个行为.我们需要注意下面几点:1. 如果ptr指向的不是动态开辟的内存,那么这样的行为是未定义的.2. 如果ptr是一个空指针那么free函数将什么都不做.
2026-01-06 14:26:07
1027
1
原创 联合和枚举
1. 增加代码的可读性和可维护性2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。3. 便于调试,预处理阶段会删除 #define 定义的符号4. 使⽤⽅便,⼀次可以定义多个常量5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤3.枚举的使用。
2025-12-27 15:49:00
1027
原创 C语言结构体
因为NODE是对前⾯的匿名结构体类型的重命名产⽣的,但是在匿名结构体内部提前使 ⽤NODE类型来创建成员变量,这是不⾏的。仔细分析,其实是不⾏的,因为⼀个结构体中再包含⼀个同类型的结构体变量,这样结构体变量的⼤ ⼩就会⽆穷的⼤,是不合理的。如果传递⼀个结构体对象的时候,结构体过⼤,参数压栈的的系统开销⽐较⼤,所以会导致性能的下 降。我们定义的两个结构体内部的数据的类型相同,只不过顺序不同,那么他们的大小也应该相同.这是按照我们创建的结构体的顺序进行初始化的,下面我再来介绍另一种的初始化的方式;
2025-12-25 11:48:27
1058
原创 冒泡排序---库函数qsort
冒泡排序就是将两个相邻的数据进行比较排序.下面我将列举一个列子:看这串数据,我们用冒泡的思想模拟冒泡排序的逻辑,进行两两排序,先将9-0进行比较 9>0 那么9 就和 0交换位置然后比较交换过的9 和 1 结果也是将9 和 0的位置交换通过这样循环的操作我们就将这一串数据中的最大的元素排到了最后的位置---这称为一趟冒泡排序.每一次冒泡排序将剩下数据的最大值排到了末尾,所以在冒泡排序结束我们就实现了数据排序.假设总共有n个数据那么需要几趟冒泡排序呢,答案很简单就是n-1.下面是代码实现。
2025-12-15 18:16:51
1089
2
原创 C语言指针讲解(2)
那么在数组传参 的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组⾸元素的地址。这里的parr[i]先访问每个数组的首元素的地址就相当于访问每个二维数组的每一行,后面的[j]就是访问每个数组的元素也就是二维数组的每一行的每一列.同理arr[i]应该等价于*(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移 量求出元素的地址,然后解引⽤来访问的。• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的)
2025-12-13 18:48:02
889
1
原创 C语言指针讲解(1)
在我们了解指针之前我们先来看生活中的一个例子,我们去旅馆里开房间,我们如何将我们的居住的地方告知我们的朋友呢?答案很简单就是将我们房间号告诉他就可以了,更准确的就是我们将我们的地址告诉了对方.那么我们知道在我们创建好一个变量后,内存就会为它申请了相应的地址.⽣活中我们把⻔牌号也叫地址,在计算机中我们 把内存单元的编号也称为地址。C语⾔中给地址起 了新的名字叫:指针。所以我们可以理解为: 内存单元的编号==地址==指针概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
2025-12-08 19:16:22
686
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅