自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【优先算法】专题——模拟(详细讲解)

模拟算法其实就是比葫芦画瓢。特点:思考比较简明,考察的就是我们的代码能力模拟算法流程(一定要在演草纸上过一遍流程,不要凭空想象),然后把流程转化成代码。

2025-02-20 00:11:42 867 8

原创 【C++】智能指针的使用及其原理

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使⽤的内存,⼀般是忘记释 放或者发⽣异常释放程序未能执⾏导致的。内存泄漏并不是指内存在物理上的消失,⽽是应⽤程序分 配某段内存后,因为设计错误,失去了对该段内存的控制,因⽽造成了内存的浪费。内存泄漏的危害:普通程序运⾏⼀会就结束了出现内存泄漏问题也不⼤,进程正常结束,⻚表的映射 关系解除,物理内存也可以释放。

2025-02-13 21:09:20 1048 3

原创 【C++】异常

异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理, 异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后 解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。C语⾔主要通过错误码的形式处理错误,错误码本质就是对错误信息进⾏分类编号,拿到错误码以 后还要去查询错误信息,⽐较⿇烦。异常时抛出⼀个对象,这个对象可以函数更全⾯的各种信息。

2025-02-12 13:57:52 571 2

原创 【C++11】lambda和包装器

原来C++类中,有6个默认成员函数:构造函数/析构函数/拷⻉构造函数/拷⻉赋值重载/取地址重 载/const 取地址重载,最后重要的是前4个,后两个⽤处不⼤,默认成员函数就是我们不写编译器 会⽣成⼀个默认的。C++11 新增了两个默认成员函数,移动构造函数和移动赋值运算符重载。如果你没有⾃⼰实现移动构造函数,且没有实现析构函数 、拷⻉构造、拷⻉赋值重载中的任意⼀ 个。那么编译器会⾃动⽣成⼀个默认移动构造。

2025-02-10 21:43:41 814 1

原创 C++11特性:初始化列表、右值引用、可变模板

C++11 是 C++ 的第⼆个主要版本,并且是从 C++98 起的最重要更新。它引⼊了⼤量更改,标准化了既 有实践,并改进了对 C++ 程序员可⽤的抽象。在它最终由 ISO 在 2011 年 8 ⽉ 12 ⽇采纳前,⼈们曾使 ⽤名称“C++0x”,因为它曾被期待在 2010 年之前发布。C++03 与 C++11 期间花了 8 年时间,故⽽这 是迄今为⽌最⻓的版本间隔。从那时起,C++ 有规律地每 3 年更新⼀次。

2025-02-10 13:34:52 1074 2

原创 【优先算法】专题——位运算

位一个的个数。

2025-02-03 19:56:10 819 10

原创 【优先算法】专题——前缀和

前缀和这个算法,重要思想就是预处理,当我们在解决一个问题的时候不太好解决的时候我们可以先预处理一下,预处理之后在解决效率是非常高的,直接解决时间复杂度是N^2级别,预处理一下直接变O(N),这种就是典型的用空间换时间,因为我们多创建了一个数组,但是时间复杂度提高了一个级别。

2025-02-03 16:12:04 1307 9

原创 【优先算法】专题——二分查找算法

我们本题使用二分查找算法,只要发现我们的数组有二段性都可以用我们的二分查找算法,什么是二段性呢就是当我们发现一个规律的时候根据这个规律选取某一个点并能把这个数组分成二部分,根据这个规律能舍去一部分,然而在另一端继续查找。

2024-12-27 22:05:10 1182 24

原创 用哈希表封装myunordered_map和myunordered_set

SGI-STL30版本源代码中没有unordered_map和unordered_set,SGI-STL30版本是C++11之前的STL 版本,这两个容器是C++11之后才更新的。但是SGI-STL30实现了哈希表,只容器的名字是hash_map 和hash_set,他是作为⾮标准的容器出现的,⾮标准是指⾮C++标准规定必须实现的,源代码在 hash_map/hash_set/stl_hash_map/stl_hash_set/stl_hashtable.h中。

2024-12-23 19:17:00 1383 14

原创 【C++】哈希表的实现

哈希表是高效的数据结构,利用哈希函数快速映射键到表位置,实现快速查找、插入和删除。其性能依赖于哈希函数选择和装载因子管理。哈希表广泛应用于数据库、缓存、字典等场景,是计算机科学中的基础工具。通过优化哈希函数和动态调整,可进一步提升其性能。

2024-12-21 20:10:17 774 12

原创 【优先算法】专题——滑动窗口

题目描述:解法⼀(暴⼒求解)(会超时):「从前往后」枚举数组中的任意⼀个元素,把它当成起始位置。然后从这个「起始位置」开始,然 后寻找⼀段最短的区间,使得这段区间的和「⼤于等于」⽬标值。将所有元素作为起始位置所得的结果中,找到「最⼩值」即可。解法二:算法思路:由于此问题分析的对象是「⼀段连续的区间」,因此可以考虑「滑动窗⼝」的思想来解决这道题。

2024-12-21 19:38:34 1033 4

原创 封装红黑树实现mymap和myset

SGI-STL30版本源代码,map和set的源代码在map/set/stl_map.h/stl_set.h/stl_tree.h等⼏个头⽂件 中。通过下图对框架的分析,我们可以看到源码中rb_tree⽤了⼀个巧妙的泛型思想实现,rb_tree是实 现key的搜索场景,还是key/value的搜索场景不是直接写死的,⽽是由第⼆个模板参数Value决定 _rb_tree_node中存储的数据类型。

2024-12-15 21:54:43 791 9

原创 Linux常见的基本指令(初学者必看)

语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息常用选项:a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。如:ls –d 指定目录-i 输出文件的 i 节点的索引信息。如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件-l 列出文件的详细信息。-n 用数字的 UID,GID 代替名称。(介绍 UID, GID)

2024-12-14 18:46:20 1042 16

原创 红黑树实现

红黑树的 插入 查找 验证红黑树的代码是否正确 时间复杂度

2024-11-30 21:13:54 954 29

原创 AVL树实现

更新后parent的平衡因⼦等于2 或 -2,更新前更新中parent的平衡因⼦变化为1->2 或者 -1->-2,说 明更新前parent⼦树⼀边⾼⼀边低,新增的插⼊结点在⾼的那边,parent所在的⼦树⾼的那边更⾼ 了,破坏了平衡,parent所在的⼦树不符合平衡要求,需要旋转处理,旋转的⽬标有两个:1、把 parent⼦树旋转平衡。通过图7和图8可以看到,左边⾼时,如果插⼊位置不是在a⼦树,⽽是插⼊在b⼦树,b⼦树⾼度从h变 成h+1,引发旋转,右单旋⽆法解决问题,右单旋后,我们的树依旧不平衡。

2024-11-23 22:38:03 1202 24

原创 【优先算法】专题——双指针

题目描述:思路:本题我们把数组分块,将非零元素移动到左边,为零元素移动右边。我们使用双指针算法(利用数组下标来充当指针)两个指针的作用:cur:从左往右扫描数组,遍历数组dest:已经处理的区间内,非零元素的最后一个位置我们将数组分为三个区间:如何做到:cur从前往后遍历的过程中:1,遇到0元素:cur++;

2024-11-23 22:35:54 1286 14

原创 【C++】map和set的介绍及使用

set的声明如下,T就是set底层关键字的类型set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模 版参数set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。⼀般情况下,我们都不需要传后两个模版参数。set底层是⽤红⿊树实现,增删查效率是 ,迭代器遍历是⾛的搜索树的中序,所以是有序 的。O(logN)

2024-11-10 16:57:42 1072 31

原创 【C++】二叉搜索树

场景1:⼩区⽆⼈值守⻋库,⼩区⻋库买了⻋位的业主⻋才能进⼩区,那么物业会把买了⻋位的业主的 ⻋牌号录⼊后台系统,⻋辆进⼊时扫描⻋牌在不在系统中,在则抬杆,不在则提⽰⾮本⼩区⻋辆,⽆ 法进⼊。场景2:商场⽆⼈值守⻋库,⼊⼝进场时扫描⻋牌,记录⻋牌和⼊场时间,出⼝离场时,扫描⻋牌,查 找⼊场时间,⽤当前时间-⼊场时间计算出停⻋时⻓,计算出停⻋费⽤,缴费后抬杆,⻋辆离场。2. 树不空,按⼆叉搜索树性质,插⼊值⽐当前结点⼤往右⾛,插⼊值⽐当前结点⼩往左⾛,找到空位置,插⼊新结点。

2024-11-01 18:24:13 883 30

原创 【C++】多态

多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票。

2024-10-28 18:57:54 1011 30

原创 【C++】继承

下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以既叫基类/派⽣类,也叫⽗类/⼦类)

2024-10-20 06:00:00 846 29

原创 【C++】模版进阶

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有 目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性。

2024-10-15 16:25:42 876 26

原创 【C++】STL--priority_queue和queue

适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设 计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口deque的原理介绍deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与 list比较,空间利用率比较高。

2024-10-14 14:43:49 1127 23

原创 【C++】STL--stack

stack的:Stack容器遵循后进先出的原则,即最后进入栈的元素最先被移出栈。

2024-10-14 12:42:35 1227 17

原创 【C++】STL--list的使用和模拟实现

list的。

2024-10-13 17:40:43 621 11

原创 【C++】STL--vector

/类模板只能实例化//初始化10个1//遍历i++)//范围for。

2024-10-03 20:16:24 1013 20

原创 【C++】STL--string(下)

如果对象中管理资源,最后就会导致 多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该 资源已经被释放,以为还有效,所以当继续对资源进项操作时,就会发生发生了访问违规。1. 在string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差 不多,一般情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可 以连接字符串。//这是传的不是别名会有拷贝构造,拷贝的不就是我想要的吗所以直接交换。

2024-09-26 04:30:00 876 15

原创 【C++】STL--string(上)

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、 快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。

2024-09-15 22:13:37 875 13

原创 C++模板初阶

class 类模板名// 类内成员定义。

2024-09-11 23:39:18 717 9

原创 C/C++内存管理

private:int main()//对于自定义类型,new能够调用构造初始化,malloc不会//传参构造//会调用10次默认构造//匿名//也可以直接写,进行隐私类型转换delete p1;delete p2;return 0;

2024-09-10 15:10:09 1142 4

原创 【C++】类和对象(下)

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

2024-09-09 12:33:22 1024 7

原创 【C++】类和对象(中)

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并 不是开空间创建对象(我们常使⽤的局部对象是栈帧创建时,空间就开好了),⽽是对象实例化时初始化 对象。构造函数的本质是要替代我们以前Stack和Date类中写的Init函数的功能,构造函数⾃动调⽤的 特点就完美的替代的了Init。2.2构造函数的特点1. 函数名与类名相同。2. ⽆返回值。(返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此)3. 对象实例化时系统会⾃动调⽤对应的构造函数。

2024-09-07 13:42:42 863 10

原创 【C++】类和对象(上)

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

2024-08-31 18:55:33 900 8

原创 【C++】基础入门

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

2024-08-29 23:05:00 882 5

原创 十大经典排序算法:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序

1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度:O(N^2),什么情况最坏:逆序,最好:顺序有序:O(N)3. 空间复杂度:O(1),它是一种稳定的排序算法4. 稳定性:稳定1. 希尔排序是对直接插入排序的优化。2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就 会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。

2024-08-26 14:49:43 1256 6

原创 二叉树OJ刷题与讲解

首先我们要知道returnSize表示的是数组元素个数,这里传过来的是一个指针类型的变量,因为函数外面可能会用到这个值,而return只能返回一个值,所以这里传地址过来是想形参改变实参,题目要求把中序遍历的结果存放在一个数组中所以我们要开辟空间,那么开辟多少空间合适呢我们可以求一下节点个数然后来申请,求节点个数也是非常简单我们用*returnSize接收,接着创建数组,进行中序遍历,这里需要定义一个函数专门用来中序遍历,因为遍历二叉树需要递归。

2024-08-19 23:15:18 751 2

原创 【数据结构】二叉树链式结构的实现

在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。注意:上述并不是创建二叉树的方式,真正创建二叉树的方式期待后续博客再看二叉树基本操作前,再回顾下二叉树的概念,二叉树是:1. 空树2. 非空:根结点,根结点的左子树、根结点的右子树组成的。

2024-08-19 18:21:05 783 4

原创 【数据结构】堆的实现和堆排序--TOP-K问题

在头文件中进行堆的定义和接口的声明int size;}HP;//堆的初始化//堆的销毁//堆的插入//堆的删除//取堆顶的数据// 堆的数据个数//堆的判空堆的实现堆是一种特殊的树形数据结构,通常实现为完全二叉树。堆分为最大堆和最小堆,最大堆的父节点值大于或等于其子节点值,而最小堆的父节点值小于或等于其子节点值。堆通常使用数组来实现,通过索引关系模拟树形结构,支持高效的插入、删除和查找最大/最小元素操作。堆排序堆排序是一种基于堆的排序算法。

2024-06-21 18:00:16 1327 14

原创 【数据结构】二叉树概念及结构

二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点(左子节点和右子节点)。它在计算机科学中广泛应用,如搜索算法、排序和数据压缩等。了解二叉树的基本概念、结构和性质对于掌握数据结构和算法至关重要。

2024-06-15 15:02:00 915 5

原创 队列的实现

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头队列(Queue)是一种线性数据结构,其特殊之处在于它遵循先进先出(FIFO)的原则。队列的主要操作包括在队列的一端插入元素(称为入队,enqueue)和在另一端移除元素(称为出队,dequeue)。由于这种操作限制,队列在访问和操作元素时表现出一种特殊的顺序性。先进先出(FIFO)

2024-06-10 07:00:00 1153 7

原创 栈的实现和括号匹配问题

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。后进先出栈是一种特殊的线性数据结构,它遵循后进先出(Last In, First Out,LIFO)的原则。栈的主要操作包括在栈顶插入元素(称为压栈,push)和从栈顶移除元素(称为弹栈,pop)。

2024-06-10 06:45:00 953 2

空空如也

空空如也

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

TA关注的人

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