自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux下编写进度条小程序

这是因为hello,linux被缓存在内存里了,因为没有在hello,linux后加\n,数据没有被立刻刷新,等到程序运行结束后,会自动刷新。这里的hello,linux运行结果等了一会才出现,但sleep命令在打印的下面。不带\n or \r\n想立刻看到数据刷新到显示器上。1.先将光标移动到下一行,在将光标移动到句首。

2025-11-20 21:58:04 199

原创 Linux下make/makefile的介绍

分别是Access,Modify,Change三种时间1.Modify修改文件内容时间(修改文件内容同样会影响文件属性时间)2.Change修改文件属性时间3.Access访问时间但不是每次访问都会修改时间,这样会导致效率低下,所以当访问次数达到一定次数后才会修改。

2025-11-19 22:19:05 324

原创 预处理,编译,汇编,链接到底在做什么?动静态库理解

那有code.o二进制文件后能否直接运行不能还要进行链接你包的头文件只是函数的声明,还需要连接库里的函数具体实现才能运行。

2025-11-18 21:21:44 208

原创 Linux下的编辑器vim的介绍

我们平时在windows下使用的ctrl+c,ctrl+v等快捷键的本质就是命令(增加编辑效率)vim多模式围绕命令展开。

2025-11-17 21:24:42 491

原创 linux权限的3个经典问题

如果进入一个目录需要什么权限?粘滞位问题

2025-11-15 19:37:24 190

原创 linux权限的概念

chmod功能:设置⽂件的访问权限格式:chmod [参数]权限⽂件名u:拥有者g:拥有者同组⽤o:其它⽤⼾chown功能:修改⽂件的拥有者格式:chown [参数]⽤⼾名⽂件名。

2025-11-14 21:06:30 357

原创 Linux指令,内核,外壳的简单理解及基础指令(3)

Shell 是一个概念,它是用户与操作系统内核之间的接口程序-Bash 是Shell的一个具体实现,而不是Shell的"子程序"

2025-11-13 21:35:37 911

原创 Linux基本指令(2)

本文介绍了Linux系统中常用的8个基础指令及其用法:1) man指令查看命令手册(q退出),2) cp指令复制文件/目录(文件夹需加-rf),3) mv指令移动/重命名文件,4) cat查看小文件内容(-n编号),5) more分页查看(q退出),6) less可前后浏览文件,7) head/tail显示文件首尾内容,8) date显示/设置时间(+%Y:%m:%d格式化)及时间戳转换。每个指令均配有语法说明和示例图示,适合初学者快速掌握基础文件操作和时间管理命令。

2025-11-12 20:43:12 351

原创 Linux基本指令(1)

本文介绍了Linux系统中最基础的几个命令及其用法,包括:pwd显示当前路径、whoami查看用户、clear清屏、ls列出文件、mkdir创建目录、cd切换路径和touch创建文件。文章详细讲解了ls命令的-l和-a参数,解释了绝对路径和相对路径的概念,以及cd~和cd-的特殊用法。同时介绍了mkdir -p创建多级目录的方法,区分了文件类型,并警告了rm -rf命令的危险性。最后还解答了关于空文件夹是否占用磁盘空间的问题,为Linux初学者提供了实用的入门指导。

2025-11-11 20:49:31 162

原创 哈希表实现

假设哈希表中已经映射存储了N个值,哈希表的⼤⼩为M,那么,负载因⼦有些地⽅也翻译为载荷因⼦/装载因⼦等,他的英⽂为loadfactor。负载因⼦越⼤,哈希冲突的概率越⾼,空间利⽤率越⾼;当key是string/Date等类型时,key不能取模,那么我们需要给HashTable增加⼀个仿函数,这个仿函。质数表获取扩容后的⼤⼩另外⼀种⽅案是sgi版本的哈希表使⽤的⽅法,给了⼀个近似2倍的质数表,每次去。• 除法散列法也叫做除留余数法,顾名思义,假设哈希表的⼤⼩为M,那么通过key除以M的余数作为。

2025-10-05 14:40:37 647

原创 红⿊树实现

的根,这样⼦树⿊⾊结点的数量不变,没有连续的红⾊结点了,且不需要往上更新,因为p的⽗亲是⿊⾊还是红⾊或者空都不违反规则。c为红,p为红,g为⿊,u不存在或者u存在且为⿊,u不存在,则c⼀定是新增结点,u存在且为⿊,则。c⼀定不是新增,c之前是⿊⾊的,是在c的⼦树中插⼊,符合情况1,变⾊将c从⿊⾊变成红⾊,更新上。的根,这样⼦树⿊⾊结点的数量不变,没有连续的红⾊结点了,且不需要往上更新,因为p的⽗亲是⿊。分析:p必须变⿊,才能解决,连续红⾊结点的问题,u不存在或者是⿊⾊的,这⾥单纯的变⾊⽆法解。

2025-10-03 10:47:35 709

原创 AVL(二叉平衡搜索树)

AVL树是一种高度平衡的二叉搜索树,通过平衡因子(右子树高度减左子树高度)控制在[-1,1]范围内。核心操作包括插入时的平衡因子更新和四种旋转(左单旋、右单旋、左右双旋、右左双旋)。插入时从新节点向上更新平衡因子,若出现失衡(±2)则通过旋转恢复平衡,同时保持搜索树性质。旋转操作会调整节点位置并重置平衡因子,确保树高始终为O(logn),从而保证增删查改的效率为O(logn)。AVL树通过这种自平衡机制,相比普通二叉搜索树具有更稳定的性能。

2025-09-18 21:00:03 624

原创 ⼆叉搜索树的实现

本文介绍了二叉搜索树的基本概念、性能分析和核心操作。二叉搜索树是一种有序二叉树结构,具有左子树值小于等于根节点、右子树值大于等于根节点的特性。其查找性能在最优情况下为O(logN),最差情况下退化为O(N)。文章详细讲解了二叉搜索树的插入、查找和删除操作,其中删除操作根据节点子节点情况分为四种处理方式,特别是对左右子树均非空的节点采用替换法删除。最后提供了C++实现代码,包含节点结构定义和插入、查找、删除等核心操作的实现逻辑。

2025-09-13 14:10:46 523

原创 多态详解(c++)

本文主要介绍了C++多态的概念、实现原理及相关特性。多态分为编译时多态(函数重载和模板)和运行时多态(虚函数机制)。运行时多态需要满足两个条件:基类指针/引用调用虚函数,且该虚函数在派生类中被重写。文章详细讲解了虚函数的重写规则、协变、析构函数重写的必要性,以及override和final关键字的使用。此外,还介绍了纯虚函数和抽象类的概念,以及多态底层实现的虚函数表机制。通过虚函数表指针,对象在运行时能正确调用对应的虚函数,实现多态行为。多态是面向对象编程中的重要特性,能提高代码的灵活性和可扩展性。

2025-09-10 20:45:36 1215

原创 继承详解(c++)

本文介绍了面向对象编程中继承的概念及实现方式。文章首先阐述了继承的定义,指出继承是代码复用的重要手段,可通过派生类扩展基类特性。在C++中,继承方式分为public、protected和private三种,其中public继承最为常用。接着讨论了基类和派生类间的转换规则,强调派生类可赋值给基类指针或引用(切片),反之则不行。文章还详细分析了继承中的作用域问题,特别是同名成员的隐藏规则。最后,重点讲解了派生类中默认成员函数(构造、拷贝构造、赋值运算符和析构函数)的实现要点,强调派生类必须正确调用基类对应函数来

2025-09-06 16:09:09 1016

原创 模板进阶(c++)

本文主要介绍了C++模板编程中的关键概念和技术。首先讲解了非类型模板参数的使用限制和注意事项。然后重点阐述了模板特化的两种形式:函数模板特化和类模板特化(包括全特化和偏特化),并通过代码示例说明了如何处理特殊类型的情况。接着分析了模板分离编译的问题及两种解决方案。最后总结了模板编程的优点(代码复用、灵活性)和缺点(代码膨胀、编译错误信息不易定位)。文章内容涵盖了模板编程的核心知识点,为理解和应用C++模板提供了系统指导。

2025-08-31 11:54:38 646

原创 priority_queue和仿函数

优先队列是一种容器适配器,其第一个元素总是最大的(类似堆结构)。它基于特定容器(如vector/deque)实现,通过随机访问迭代器维护堆结构,自动调用make_heap等算法。底层实现包含仿函数(如Less/Greater)用于元素比较,提供push/pop/top等操作,并通过adjust_up/down维护堆性质。仿函数通过重载operator()实现类似函数的调用行为,相比函数指针更适合模板参数传递,能灵活控制比较逻辑。这种设计既保持了堆的特性,又提供了标准容器的接口。

2025-08-23 22:01:30 374

原创 stack,queue以及deque的介绍

本文主要介绍了C++中栈和队列的底层实现。栈和队列作为容器适配器,默认使用deque作为底层容器,因其结合了vector和list的优点:支持高效头尾插入删除和随机访问。文章分析了deque的底层结构,通过中控数组管理多个小数组实现动态扩容,同时详细解读了deque的迭代器设计、插入删除操作原理以及随机访问的实现机制。源码分析展示了deque如何通过计算小数组位置实现高效访问,并解释了初始数据存储在中控数组中间的设计考量,这使得deque成为适配器默认容器的理想选择。

2025-08-23 19:46:58 525

原创 list的迭代器

STL中vector和list的迭代器实现方式不同。vector的迭代器可直接用指针模拟,而list需要自定义迭代器类。在list的实现中,通过模板类__list_iterator封装节点指针,重载operator*和operator->来访问数据。list类还定义了两个迭代器类型:普通迭代器和const迭代器,通过模板参数区分。这种设计体现了不同容器底层结构对迭代器实现的影响。

2025-08-17 15:34:50 216

原创 string的实现

和拷贝构造的思路一致,只是赋值重载用于修改一个已经存在的对象,需要释放其原本的内存delete[] _str;_str是用来储存字符的数组,_size是数组中字符的个数,_capacity是数组的容量,buff数组后面会介绍。4. 剩余字符处理 :退出循环后,若 buff 中仍有未处理的字符( i > 0 ),则将其追加到 s。先计算要构造的字符串的长度并赋值,再开一个新的空间将其赋值给_str。这是比较麻烦的写法,先开一个和拷贝对象一样大小的空间,再依次赋值。但仍需开新的空间所以二者的效率是一样的。

2025-08-11 14:02:40 371

原创 vector的实现

主要谈一下reserve,insert与ersert中的问题。

2025-08-10 15:15:06 205

原创 C/C++内存管理

在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和delete[],注意:匹配起来使用。new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是。new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申。就继续申请,否则就抛异常。

2025-07-13 11:46:06 612

原创 类和对象(下)

⽆论是否显⽰写初始化列表,每个构造函数都有初始化列表;⽆论是否在初始化列表显⽰初始化成员变量,每个成员变量都要⾛初始化列表初始化;

2025-07-06 13:29:10 580

原创 类和对象(中)赋值运算符与取地址运算符重载

除⾮⼀些很特殊的场景,⽐如我们不想让别⼈取到当前类对象的地址,就可以⾃⼰实现⼀份,胡乱返回⼀个地址。运算符函数是成员函数,则它的第⼀个运算对象默认传给隐式的this指针,因此运算符重载作为成员函数时,参数⽐。运算符有两个参数,⼆元运算符的左侧运算对象传给第⼀个参数,右侧运算对象传给第⼆个参数。8.重载<<和>>时,需要重载为全局函数,因为重载为成员函数,this指针默认抢占了第⼀个形参位。注意以上5个运算符不能重载。C++规定,后置++重载时,增加⼀个int形参,跟前置++构成函数重载,⽅便区分。

2025-07-01 15:55:48 680

原创 类和对象(中)默认成员函数(构造,析构,拷贝)

但是有资源申请时,⼀定要⾃⼰写析构,否则会造成资源泄漏(默认生成析构函数无法自动释放内置类型成员申请的资源(如动态内存),因此当类涉及资源管理时,必须显式定义析构函数,手动释放资源,避免泄漏。7.如果我们不写,用系统默认的,在类的变量是内置类型并且对初始化无要求(无逻辑要求)时是可以满足的,初始化看编译器。但如果是自定义类型的成员函数会,要求调⽤这个成员变量的默认构造函数初始化,如果这个成员变量,没有默认构造函数那么就会报错。默认成员函数是用户没有显示实现,编译器自动生成的成员函数称为默认成员函数。

2025-07-01 12:28:16 1187

原创 类和对象(上)

1.1类定义格式• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。• 定义在类⾯的成员函数默认为inline。public://成员函数。

2025-06-29 10:38:50 465

原创 c++入门

3的和结果保存在⼀个临时对象中, int& rd = d 也是类似,在类型转换中会产⽣临时对象存储中间值,也就是时,rb和rd引⽤的都是临时对象,⽽C++规定临时对象具有常性,所以这⾥就触发了权限放⼤,必须要⽤常引⽤才可以。(1)inline对于编译器来说只是一个建议,不同的编译器有不同的标准,一般是长度较短的函数才展开,一但函数为递归或长度较长石,展开反而会使运行的代码过长。定义,在使⽤空值的指针时,都不可避免的会遇到⼀些⿇烦,本想通过f(NULL)调⽤指针版本的。

2025-06-26 18:56:48 292

原创 详细讲解C++中的引用

但我留了一把钥匙可以访问这个房间,而func()结束后,如果没有再次调用新函数,那我之前住过的房间还是我上次住的原样,x=0,但后来调用了fxxx(),虽然名字不同但基本逻辑相同,又在上次相同的空间,相当于住进了我上次住进的房间,所以x的值会随之改变。比如你身份证上的名字与你的小名。C++中为了避免引⼊太多的运算符,会复⽤C语⾔的⼀些符号,⽐如前⾯的<<和>>,这⾥引⽤也和取地址使⽤了同⼀个符号&。• 引用的实践主要是引用传参,引用作返回值时减少拷贝传参,提高传参效率,改变引用对象同时改变被引用对象的值。

2025-05-14 17:05:21 1009

原创 从0开始c++入门

定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。c++中有局部域,全局域,命名空间域,类域。局部域和全局域除了会影响编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

2025-05-12 19:05:18 544

原创 基础算法篇(蓝桥杯常考)

顾名思义,就是把所有情况全都罗列出来,然后找出符合题⽬要求的那⼀个。因此,枚举是⼀种纯暴⼒的算法.使⽤枚举策略时,重点思考枚举的对象(枚举什么),枚举的顺序(正序还是逆序),以及枚举的⽅式(普通枚举?此时如果需要⽤数据的值来映射数组的下标时,就可以⽤离散化的思想先预处理⼀下所有的数据,使得每⼀个数据都映射成⼀个较⼩的值。前缀和与差分的核⼼思想是预处理,可以在暴⼒枚举的过程中,快速给出查询的结果,从⽽优化时间复杂度。分治,字⾯上的解释是「分⽽治之」,就是把⼀个复杂的问题分成两个或更多的相同的⼦问题,直到。

2025-03-23 16:44:47 2145

原创 插入,选择,冒泡,堆,快速,归并排序

排序算法

2025-03-08 19:30:13 1590

原创 从0实现哈希表

但是要注意, key 有可能是负数,取模之后会变成负数。除留余数法: hash(key) = key % N。• 但是正数加上模数会变⼤,所以统⼀再取⼀次模。最终就是 (key % N + N) % N。• 负数补正的操作为:加上模数即可。

2025-03-08 12:55:18 372

原创 从0实现堆

堆(heap),是⼀棵有着特殊性质的完全⼆叉树,可以⽤来实现优先级队列(priority_queue)。是⼀棵完全⼆叉树;对于树中每个结点,如果存在⼦树,那么该结点的权值⼤于等于(或⼩于等于)⼦树中所有结点权值。如果根结点⼤于等于⼦树结点的权值,称为⼤根堆;反之,称为⼩根堆。

2025-03-07 20:54:42 517 1

原创 从0实现二叉树的存储与遍历

第⼀⾏⼀个整数n,表⽰结点数。之后n⾏,第⾏两个整数l 、r,分别表⽰结点i的左右⼦结点编号。若l=0则表⽰⽆左⼦结点,同理。2.1 深度优先遍历不同于常规树的深度优先遍历,⼆叉树因其独特的性质可以划分成三种深度优先遍历:先序遍历,中序遍历,和后序遍历。其中,三种遍历⽅式的不同在于处理根节点的时机。对于⼀棵⼆叉树⽽⾔,整体可以划分成三部分:根节点+左⼦树+右⼦树:• 先序遍历的顺序为:根+左+右;• 中序遍历的顺序为:左+根+右;• 后序遍历的顺序为:左+右+根。

2025-03-02 15:05:37 535 1

原创 从0实现树结构:存储与遍历

*

2025-02-28 22:03:14 1560

原创 从0实现栈,队列(包括STL)

int top;//1.push(x) :向栈中加⼊⼀个数x//2.出栈//3.查询栈顶元素//4.判断栈是否为空//5. 栈中元素个数//队列(先进先出)// 1.⼊队// 2.出队// 3.查询队头元素// 4.查询队尾元素// 5.判断是否为空// 有效元素的个数。

2025-02-28 20:24:27 340

原创 从0实现链表(动态/静态)

///1.创建节点//2.动态申请节点并初始化//3.打印链表//4.头插法//5.尾插法//6.头删法//7.尾删法//8.删除所有节点//test////1.创建-初始//2.头插法//3.遍历链表//4.按值查找//5.在任意位置插入//6.删除元素//test。

2025-02-22 20:30:00 234 2

原创 当顺序表遇上STL函数:一场高效的替代之旅

vector 的底层就是⼀个会⾃动扩容的顺序表,其中创建以及增删查。• 如果⼤于原始的⼤⼩,多出来的位置会补上默认值,⼀般是 0。• 如果⼩于原始的⼤⼩,相当于把后⾯的元素全部删掉。改等等的逻辑已经实现好了,并且也完成了封装。• 修改 vector 的⼤⼩。//1.创建vector。• 清空 vector。

2025-02-21 15:14:42 530 1

原创 从0实现顺序表

//1.创建//2.尾插//3.头插(从右向左)//4.从任意位置插入//5.尾删//6.头删//7.任意位置删除//8.按值查找//9.按位查找//10.修改元素//11.清空//test

2025-02-21 14:21:16 236

空空如也

空空如也

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

TA关注的人

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