- 博客(84)
- 收藏
- 关注
原创 Linux系统编程 -- 基本指令
前言声明:本文中使用的Linux操作工具为xshell,系统为ubuntu。本文会列出常用基本指令和其选项,但是指令本身并不是重点,也无需死记硬背,重点是指令背后所携带出来的linux相关知识点,即知识补充和拓展。前言linux是工程师使用比较多的系统,像windows当中我们用的更多是图形界面的操作方式,其实所谓的图形界面也只是为了让人们更好的使用操作系统罢了。在操作系统诞生之初,所有的操作系统在进行操作(例如启动任务)时,全部都是黑屏+指令。
2025-03-13 17:23:07
835
原创 C++ -- 异常
有时catch到一个异常对象后,需要对错误进行分类,其中的某种异常错误需要进行特殊的处理,其他错误则重新抛出异常给外层调用链处理。捕获异常后需要重新抛出,直接throw;就可以把捕获的对象直接抛出。C++标准库也定义了一套自己的异常继承体系库,基类是exception,所以我们日常写程序,需要在主函数捕获exception即可,要获取异常信息,调用what函数,what函数是一个虚函数,派生类可以重写。
2025-02-09 18:19:44
636
原创 C++11
C++11是C++的第二个重要版本,并且是自C++98之后总重要的一次更新。它引入了大量更改,标准化了已有实践,并改进了对C++程序员可用的抽象。在它最终由ISO在2011年8月12日采纳前,人们曾使用名称“C++ 0x”,因为它曾被期待在2010年之前发布。C++03与C++11期间花了8年时间,故而这是迄今为止最长的版本间隔。从那之后,C++就有规律的每三年更新一次。
2025-01-15 23:23:57
879
原创 C++ -- 哈希表封装实现unordered_map 和 unordered_set
本章内容分为源码看框架讲解和结构模拟实现两部分,源码框架是让我们了解容器结构在设计时的思路,模拟实现才是重点。因此如果在看源码结构式感到疑惑,不妨继续往下看,相信一切都会慢慢了解~
2024-12-16 20:04:02
715
原创 C++ -- unordered_set和unordered_map
unordered_set 的声明如下,key 就是 unordered_set 底层关键字的类型。unordered_set 默认要求 key 支持转换为整形,如果不支持或者想按自己的需求走可以自行实现支持将 key 转换成整形的仿函数传给第二个模板参数。unordered_set 默认要求 key 支持比较相等,如果不支持或者想按自己的新需求走可以自行实现支持将key比较相等的仿函数传给第三模板参数。
2024-12-05 11:22:38
1022
原创 数据结构进阶(C++) -- 红黑树的模拟实现
红黑树和AVL树一样,也是一棵二叉搜索树,相较于AVL树,它的每个节点没有平衡因子,但是增加了一个表示颜色的变量,红黑树确保没有一条路径会比其他录径长出2倍,因而是接近平衡的,虽然没有AVL树那般无限接近平衡,但也比AVL树在插入时少旋转了很多次,在综合效率上是红黑树更优。
2024-11-29 20:41:12
857
原创 数据结构进阶(C++) -- AVL树的实现
1962年,前苏联的科学家G.M.Adelson-Velsky和E.M.Landis 在论文《An algorithm for the organization of information》中发表了AVL树。AVL树是最先发明的自平衡二叉搜索树,AVL树可以是一棵空树,也可以是具备下列性质的二叉搜索树:1、它的左右子树都是AVL树。2、左右子树的高度差的绝对值不超过1。由此可见,AVL树是一棵高度平衡的二叉搜索树,通过控制高度差来控制平衡。
2024-11-24 11:16:21
990
原创 C++标准模板库 -- map和set
set 声明如上,T就是 set 底层关键字 key 的类型。set 默认要求 T 支持小于比较(Less<T>),如果不支持或者想按自己的需求走可以自行实现仿函数传给第二个模板参数。set 底层存储数据的内存是从空间配置器申请的,如果有需要可以实现自己的内存池,传给第三个参数。但一般情况下,我们都不需要传后两个模板参数。set 底层使用红黑树实现的,增删查的效率是O(LogN),迭代器遍历是走的二叉搜索树的中序遍历,所以遍历是有序的。
2024-11-18 17:42:40
1245
原创 数据结构 -- 二叉搜索树
场景2:商场无人值守车库,入口进场时扫描车牌,记录车牌和入场时间,出口离场时,扫描车牌,查找入场时间,用当前时间减入场时间计算出停车时长,计算出停车费用,缴费后抬杆,车辆离场。场景1:校区无人值守车库,校区车库买了车位的业主才能进小区,那么物业会把买了车位的业主的车牌号录入后台系统,车辆进入时扫描车牌在不在系统中,在就允许进入,不再则不能进入。场景3:统计⼀篇文章中单词出现的次数,读取⼀个单词,查找单词是否存在,不存在这个说明第⼀次出现,(单词,1),单词存在,则++单词对应的次数。
2024-11-15 20:48:32
813
原创 Linux -- 初步认识
操作系统(Operating System,简称OS)是计算机系统中不可或缺的核心部分,它负责管理和控制计算机的硬件和软件资源,为用户提供一个良好的工作环境和交互界面。操作系统是一个大型的程序系统,它负责计算机的全部软、硬件资源的分配、调度工作,控制并协调多个任务的活动,实现信息的存取和保护。同时,操作系统还提供了用户接口,使用户能够方便地运行程序、访问文件和管理系统设置。
2024-11-12 18:56:43
683
1
原创 C++ -- 多态与虚函数
多态是一个继承关系下的类对象,去调用同一函数时产生了不同的行为。比如Student继承了Person。Person对象买票为全家,而Student对象买票则会有折扣。
2024-11-09 20:50:05
737
原创 C++ -- 继承
了解了继承出现的原因之后,我们来看看继承的定义。在上面的代码中,Person类中的成员都继承给了 Student 和 Teacher 类,我们将 Person 称为基类(父类),Student 和 Teacher 成为派生类(子类)。
2024-11-07 18:38:51
781
原创 算法每日练 -- 双指针篇(持续更新中)
常见的双指针有两种形式,一种是对撞指针(左右指针),一种是快慢指针(前后指针)。需要注意这里的双指针不是 int* 之类的类型指针,而是使用数组下标模拟地址来进行遍历的方式。
2024-11-06 11:12:44
804
原创 C++ -- 模板进阶
一个程序/项目由若干源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生。增强了代码的灵活性。模板会导致会导致代码代码膨胀问题,也会导致编译时间变长。出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2024-11-02 20:20:37
893
原创 C++标准模板库--栈和队列
优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先级队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。
2024-10-31 20:21:55
1010
原创 C++标准模板库--list
list 是序列容器,允许在序列内的任何位置进行常量时间的插入和删除操作,以及两个方向的迭代。列表容器被实现为双向带头链表;双链表可以将它们包含的每个元素存储在不同且不相关的存储位置。排序是通过与前面元素的链接和后面元素的链接的每个元素的关联在内部保持的。它们与非常相似:主要区别在于对象是单链表,因此它们只能向前迭代,以换取更小和更高效。
2024-10-20 16:40:22
900
原创 C++标准模板库--vector
vector(向量)是一种序列容器,表示为可以改变大小的数组。vector中的元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针+偏移量来访问任意元素,且与数组一样高效。但与数组不同的是,vector的大小可以动态变化,容器会自动处理他们的存储空间。在其内部,vector使用动态分配的数组来存储他们的元素。当插入新元素需要增大容量时,存储空间需要重新分配,这意味着需要分配一个新数组并将所有元素移动到其中。
2024-10-18 18:03:17
1311
原创 C++标准模板库--string
STL(standard template libaray - 标准模板库)是C++标准库的重要组成部分,不仅是一个可复用的组件库,还是一个包罗了数据结构与算法的软件框架。对于STL的学习,第一步是要熟练使用STL,第二步是了解泛型技术的内涵和STL的原理并进行实操,第三步是对STL进行扩展。所以接下来的一段时间,我会将STL的各种容器和重要函数进行讲解,首先从string开始。
2024-10-09 20:45:03
1187
原创 C++必备知识--模板
在学习了函数重载之后,我们了解了不同参数的同名函数是可以构成重载的,这种方式便利了调用类型不同但功能相同的函数,使得我们编写代码更加得心应手,但是也会让我们做很多重复的工作,导致代码冗余。那么如何实现一个各种类型通用的函数呢,这就需要了解泛型编程的基础概念,我们以交换函数为例:针对这些问题,我们C++的祖师爷 Bjarne Stroustrup 创造了模板。如果在C++中能够存在一种模具,通过给模具填充不同的类型就能获得对应具体类型的代码,那将会节省大量重复不必要的工作。
2024-08-07 17:18:01
636
原创 C++必备知识--类和对象
class是类的关键字,Stack是类的名字(自己定义的),在{}中定义类的主体。C++中类的出现是为了替代C语言中的结构体,所以类的结构与结构体类似,{}之后需要加分号。类体中的内容称为类的成员,类中(声明)的变量称为类的属性或成员变量,类中的函数称为类的方法或成员函数。在C++中也兼容了C语言中结构体的用法,并将 struct 升级成了类,也就是说C++中的 struct 内也可以定义函数,但是一般情况下我们还是优先使用class。除此之外,定义在类里的成员函数默认是inline内联函数。
2024-07-30 14:43:24
1135
原创 C++入门基础
• 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质上是定义出了一个域,这个域跟全局域各自独立,不同域可以定义同名变量,所以上面的rand不在冲突了。• C++中的域分为函数局部域、全局域、命名空间域和类域;域影响的是编译时语法查找的一个变量/函数/类型出处(声明或定义)的逻辑,所以有了域隔离,名字冲突就解决了。
2024-07-23 15:50:20
1142
原创 MATLAB的基础知识
1. 在每行语句后面加上英文分号表示不在显示运行结果。a = 3;a = 52. 多行注释快捷键,CTRL+R。3. 取消多行注释,CTRL+T。4. 清空工作区的所有变量使用clear。5. 清空命令行窗口的所有变量使用clc。6. clc和clear一起使用,起到初始化的作用,防止之前的结果对新脚本文件(后缀名为.m的文件)产生干扰。
2024-07-20 09:33:23
1141
原创 数据结构--排序
1.元素集合接近有序,直接插入排序算法的时间效率越高。2.时间复杂度:O(N^2)3.空间复杂度:O(1)。4.稳定性:稳定。
2024-07-18 16:31:49
1139
1
原创 数据结构--二叉树(二)
链式二叉树是链式树集合中的一种,该树的每个根节点最多只有两个孩子节点,我们一般用左右孩子来称呼,在初学链式二叉树时,由于大家对链式二叉树的结构掌握还不够深入,为了降低本章的学习难度及成本,我们先手动创建一棵简易二叉树,快速进入二叉树的操作学习中,等所有基本操作大家都掌握后,我们再来了解如何创建链式二叉树。构建的二叉树结构如图;我们先来回顾一下二叉树的概念,二叉树是:1. 空树。2. 非空:根结点,根结点的左子树、根结点的右子树组成的。
2024-06-08 15:50:52
1167
原创 数据结构--二叉树
一棵二叉树是节点的一个有限集合,该集合或者为空或者由根节点加上两棵别称为左子树和柚子树的二叉树组成。从图中可以看出:1、二叉树不存在度大于2的节点。2、二叉树的子树有左右之分,次序不可颠倒,因此二叉树为有序树。
2024-06-01 11:57:49
1270
原创 数据结构--树
在本节开始之前我们先来了解一下在树的学习中,我们需要了解哪些概念。叶节点或终端节点:度为0的节点称为叶节点;如上图:B、C、H、I...等结点为叶结点。。双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的双亲节点;如上图:A是B的父结点。孩子节点或子节点:一个节点含有子树的根节点称为该节点的子节点;如上图:B是A的孩子结点。树的高度或深度:树中节点的最大层次;如上图:树的高度为4。非终端结点或分支结点:度不为0的结点;如上图:D、E、F、G...等结点为分支结点。
2024-05-27 21:08:19
684
原创 数据结构--栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据的插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作被称为进栈/压栈/入栈,入数据的地方为栈顶、出栈:栈的删除操作叫做出栈。出数据也在栈顶。出栈、入栈的过程我们可以想象为我们往羽毛球筒里放羽毛球和拿羽毛球,都是只能在一个口进出,是不是可以很形象的想象出来。下面我们来看一看栈是如何实现的。
2024-05-22 14:28:12
1035
原创 数据结构--顺序表和链表的区别
顺序表和链表之间各有优劣,我们不能以偏概全,所以我们在使用时要关注任务的注重点,以此来确定我们要使用两者中的哪一个。
2024-05-10 20:13:19
605
1
原创 数据结构--单链表OJ题
给你单链表的头节点head,请你反转链表,并返回反转后的链表。解:这道题有递归和迭代两种反转链表的方式。如果是迭代的话,我们需要使用的是三指针法。首先保证链表不为空,然后创建三个指针(n1、n2、n3),开始时将n1赋值为NULL,n2赋值为head,n3赋值为head->next。随后进行链表遍历,先让n2->next = n1,然后n1 = n2、n2=n3、当n3!= NULL时,n3也向后移动一个节点,即n3 = n3->next。在循环结束后,n1就是我们新的头结点。
2024-05-02 16:27:00
867
原创 数据结构--顺序表经典OJ题
给你两个按排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你nums2到nums1中,使合并后的数组同样按排列。最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。设计实现一个时间复杂度为O(m + n)的算法解决此问题.解:对于这道题来说我们有多种思路,但是在限制了时间复杂度后,三变量就是最好的方法。
2024-05-02 15:33:12
616
原创 数据结构--算法的复杂度
这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。但是这种方法有很大的缺陷:1、必须依据算法事先编制好程序,这通常需要花费大量的时间和精力。如果编制出来发现它根本是很糟糕的算法,不是竹篮打水一场空吗?2、时间的比较依赖计算机硬件和软件等环境因素,有时会掩盖算法本身的优劣。3、算法的测试数据设计困难,并且程序的运行时间往往还与测试数据的规模有很大关系,效率高的算法在小的测试数据面前往往得不到体现。
2024-05-02 10:32:49
250
原创 数据结构中的算法
什么是算法呢?算法是描述解决问题的方法。算法(Algorithm)这个单词最早出现在波斯数学家阿勒·花刺子密在公园825年(相当于我们中国的唐朝时期)所写的《印度数字算数》中。如今普遍认可的对算法的定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。现实世界中的问题千奇百怪,算法当然也就千变万化,没有通用的算法可以解决所有问题。甚至解决一个小问题,很优秀的算法却不一定适合它。指令能被人或机器等计算装置执行。
2024-05-01 17:23:57
1378
原创 C语言实战项目--贪吃蛇
windows是一个多作业系统,除了协调应用程序的执行、分配内存、管理资源之外,它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图性、使用周边设备等目的,由于这些函数的服务对象是应用程序(Application),所以便称之为Application Programming Interface,简称API函数。Win32 API也就是Microsoft Windows32位平台的应用程序编程接口。
2024-04-30 21:27:22
2228
原创 数据结构--双向链表
这里单独讲解一个点,我们在创建“哨兵位”的时候使用的参数是一级指针的地址,并用二级指针接收,目的是创建一个节点的地址用作节点的链表头部,之后的其他函数均使用一级指针是为了防止头节点被修改。三个种类可以任意搭配,所以总共可以形成八种链表,但是最常用的是单向不带头不循环链表和双向带头循环链表。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”。注意:这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严。文件:DoubleListNode.h。
2024-04-21 13:27:16
377
原创 数据结构--单链表
火车的车厢是独立存在的,且每节车厢都有车门,假设每节车厢的车门都被锁上了,并且需要不同的钥匙开锁,而每次只能携带一把钥匙,我们该如何从车头走到车尾呢?链表中每个节点都是独⽴申请的(即需要插⼊数据时才去申请⼀块节点的空间),我们需要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点,因此我们需要指针变量来保存下⼀个节点的位置。当我们想要保存⼀个整型数据时,实际是向操作系统申请了⼀块内存,这个内存不仅要保存整型数据,也需要保存下⼀个节点的地址(当下⼀个节点为空时保存的地址为空)。
2024-04-17 20:30:03
471
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人