自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Git】第五篇:基本操作(添加文件)

我们在前文中提过了.git目录,也明确说了我们不能手动去.git目录下创建修改等任何操作。

2023-11-14 23:29:36 1087

原创 【Git】第四篇:基本操作(理解工作区、暂存区、版本库)

【代码】【Git】第四篇:基本操作(理解工作区、暂存区、版本库)

2023-11-13 23:02:59 1085

原创 【Git】第三篇:基本操作(配置本地仓库)

初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码。

2023-11-13 22:18:33 472

原创 【Git】第二篇:基本操作(创建本地仓库)

我们知道,git是一个版本控制器,可以帮我们控制管理电脑上所有格式的文档。而我们需要使用git管理文件的时候,我们必须将这些文件放到git仓库中,只有在git仓库中的文件才可以被我们的git追踪管理。

2023-11-13 21:51:30 284

原创 【Git】第一篇:Git安装(centos)

以我自己的centos7.6为例,我们可以输入以下指令查看自己是否安装了git.安装了的话就会显示自己安装的版本。

2023-11-13 21:34:37 624

原创 【C++初阶】第十三篇:模板进阶(非类型模板参数、模板的特化以及模板的分离编译)

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生。增强了代码的灵活性。模板会导致代码膨胀问题,也会导致编译时间变长。出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2023-05-16 16:25:54 711 2

原创 【C++初阶】第十二篇:priority_queue的使用与模拟实现

priority_queue文档介绍优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中的元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。默认情况下priority_queue是大堆。方式一: 使用vector作为底层容器,内部构造大堆结构。方式二: 使用vector作为底层容器,内部构造小堆结构。方式三: 不指定底层容器和内部需要构造的堆结构。

2023-05-13 20:20:32 669 9

原创 【C++初阶】第十一篇:stack和queue的使用与模拟实现

stack的文档介绍stack是一种容器适配器,专门用于具有后进先出操作的上下文环境中,其只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作。

2023-05-13 16:30:36 536

原创 【C++初阶】第十篇:list模拟实现

T _data;} };// 同一个类模板实例化出的两个类型 // typedef __list_iterator<T, T&, T*> iterator;} // const iterator cit // *cit // ++cit 这样的话,可以解引用,但是不能++ /*const T& operator*() constreturn tmp;return tmp;} };

2023-04-09 23:03:51 528 18

原创 【c++初阶】第九篇:vector(常用接口的使用 + 模拟实现)

vector是表示可变大小数组的序列容器。vector就像数组一样,也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。当新元素插入,vector需要重新分配大小时,其做法是,分配一个新的数组,然后将全部元素移到这个数组当中,并释放原来的数组空间。vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因此存储空间比实际需要的存储空间一般更大。

2023-04-09 18:46:19 941 11

原创 【C++初阶】第八篇:string的模拟实现

注: 为了防止与标准库当中的string类产生命名冲突,模拟实现时需放在自己的命名空间当中构造函数设置为缺省参数,若不传入参数,则默认构造为空字符串。字符串的初始大小和容量均设置为传入C字符串的长度(不包括’\0’)拷贝构造函数在模拟实现拷贝构造函数前,我们应该首先了解深浅拷贝:很明显,我们并不希望拷贝出来的两个对象之间存在相互影响,因此,我们这里需要用到深拷贝。下面提供深拷贝的两种写法:写法一:传统写法传统写法的思想简单:先开辟一块足以容纳源对象字符串的空间,然后将源对象的字符串拷贝过去,接着把源

2023-04-05 16:36:13 534 3

原创 【C++初阶】第七篇:string的基础接口使用

重载后的关系运算符支持string类和string类之间的关系比较、string类和字符串之间的关系比较、字符串和string类之间的关系比较。我们知道,使用>>进行输入操作时,当>>读取到空格便会停止读取,基于此,我们将不能用>>将一串含有空格的字符串读入到string对象中。string类中对+=运算符进行了重载,重载后的+=运算符支持string类的复合赋值、字符串的复合赋值以及字符复合的赋值。getline函数将从is中提取到的字符存储到str中,直到读取到分隔符delim或换行符’\n’为止。

2023-04-04 14:09:53 697 1

原创 【Linux系统】第八篇:Linux操作系统中的进程概念(冯诺依曼+操作系统+进程状态+进程优先级)

举个例子:你用QQ和朋友聊天时数据的流动过程要使用QQ,首先需要联网,假设你和你的朋友的电脑都是冯诺依曼体系结构,在你向朋友发送消息这个过程中,你的电脑当中的键盘充当输入设备、显示器和网卡充当输出设备,你朋友的电脑当中的网卡充当输入设备、显示器充当输出设备。刚开始你在键盘当中输入消息,键盘将消息加载到内存,此时你的显示器就可以从内存获取消息进而显示在你自己的显示器上,此时你就能在你自己的电脑上看到你所发的消息了。

2023-03-26 01:42:14 597 5

原创 【C++初阶】五、内存管理

一、动态申请单个类的空间//申请 delete p1;//销毁//申请 free(p2);//销毁二、动态申请多个类的空间//申请 delete [ ] p3;//销毁//申请 free(p4);//销毁在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。

2023-03-25 20:07:33 834 8

原创 【C++初阶】六、模板初阶(函数模板+类模板)

template < class T1 , class T2 , . . . , class Tn > class 类模板名 {// 类内成员定义 };public :cout

2023-03-22 01:57:19 359 7

原创 【C++初阶】四、类和对象(下)

若一个类中存在类对象时,且该类对象的类没有默认构造函数。那么我们在实例化该类对象时就需要传参对其进行初始化,所以实例化没有默认构造函数的类对象时必须使用初始化列表对其进行初始化。

2023-03-21 01:59:25 679 12

原创 【Linux系统】第七篇:Linux调试器gdb的使用

GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具;

2023-02-20 17:31:59 10361 11

原创 【Linux系统】第六篇:Linux的自动化构建工具——make/makefile

当源文件的Modify时间比目标文件的Modify时间新时,才可以再次利用make进行编译。

2023-02-12 00:10:11 6086 18

原创 【Linux系统】第五篇:Linux中编译器gcc/g++的使用

在以前学习中,我们是使用gcc/g++它是直接完成程序编译的过程,生成可执行文件,若我们想一步一步的看清楚过程,我们可以执行下面这样的一句指令,让。编译时,gcc会检查代码的规范性、是否有语法错误,以确定代码所做的工作,检查无误后gcc会把C语言处理为汇编语言。预处理、编译、汇编三个阶段统称为编译过程,完成了上述的编译过程,就到了程序翻译的最后一个阶段:链接。链接的时候,不是与库产生关联,而是将程序内部需要使用的方法,拷贝一份,完成静态链接。的时候,对应的实现,才和我们的代码关联起来。

2023-02-01 12:15:35 7422 8

原创 【Linux系统】第四篇:Linux中编辑器vim的使用

vim是Linux下的一款多模式编辑器。注意:vim不支持调试、编译、运行代码的。与Windows 下有例如 Visual Studio、IDEA 这样的集编写代码、编译代码、调试代码、运行代码、代码关系维护以及各种各样的复杂功能于一身的开发工具,叫做集成开发环境 IDE不同。vim 是个文本编辑器(相当于我们windows下的记事本),但它更专注于代码的编写,具有语法高亮等功能。

2023-01-16 01:19:05 7743 15

原创 【Linux系统】第三篇:Linux中软件包管理器yum的使用

软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器.主要应用在Fedora, RedHat, Centos等发行版上.通俗来讲:yum就相当于Linux中提供的”应用商店“

2022-12-02 14:26:53 7830 29

原创 【Linux系统】第二篇、权限管理篇

这里我们在上一篇:基本指令篇,开头稍微讲解了一些,接下来我们具体的讲一讲:Linux下有两种用户:超级用户(root)、普通用户。命令: su [用户名] (su - [用户名])(后面的目录可以切换到用户的家目录下,路径发生改变,前者路径不发生改变)功能: 切换用户。例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。命令: sudo功能: 不切换用户,就仅仅

2022-11-26 13:47:49 8413 17

原创 【每日一练】倒置字符串 && 排序子序列(C++实现)

第四步:逆置完一个单词后,start就指向end的下一个位置(因为当前end所指向的字符是空格),然后将end指向start,再次遍历字符串,遇到空格或到字符串末尾s.end()时停止。第五步:当end等于s.end()的时候,就表示逆置到最后一个单词了,将最后一个单词逆置后,start就不用再指向end的下一个位置了,直接将end赋值给start即可。第一步:定义一个数组,大小为n+1,防止在比较时,产生越界访问,最后一个数据值设为0,因为n个数据都是大于等于1的数据,都比0大,所以不会影响最后结果。

2022-11-21 22:47:15 5656 11

原创 【Linux系统】第一篇:基础指令篇

我们在进行上述两个删除普通文件和指令时,每次执行指令后,都需要你进行是否确认删除,如果是一个文件还好,但是一个目录下有多个目录或文件,或者同时删除多个文件,那我们都需要一 一进行确认,这样就非常麻烦了,怎么解决?看到这个实例我们可能有点疑惑,因为我们的-i选项,我们在上方没有选择,可是他还是会进行询问,其实是有些机器他会默认进行询问,而有些则不会,若想主动进行询问确认,则可以主动带上-i选项。我们在日常使用电脑中,就会创建各种各样的文件,所以我们对文件已经在熟悉不过了,那文件还有什么可谈的呢?

2022-11-21 19:27:48 8067 18

原创 【C++初阶】三、类和对象(中)

文章目录1.类的6个默认成员函数2. 构造函数2.1 概念2.2 特性3.析构函数3.1 概念3.2 特性4. 拷贝构造函数4.1 概念4.2 特征5.赋值运算符重载5.1 运算符重载5.2 赋值运算符重载6.日期类的实现7.const成员8.取地址及const取地址操作符重载1.类的6个默认成员函数2. 构造函数2.1 概念2.2 特性3.析构函数3.1 概念3.2 特性4. 拷贝构造函数4.1 概念4.2 特征5.赋值运算符重载5.1 运算符重载5.2 赋值运算符重载6.日期

2022-11-20 22:41:11 5803 14

原创 【每日一练】组队竞赛 && 删除公共字符(C++实现)

因为数据是经过排序之后的,这样分组,每组一定可以取到一个最大值和一个次大值,这样水平值总和就是最大的了。因为ASCII表中一共有256个字符,所以我们可以定义一个数组,初始化为0。我们既然知道该如何分组了,那我们该如何取到每组的第二高水平值呢?,将对应字符位置,出现次数等于0的字符保存下来。我们这道题的最重要,最难点就是该如何分组呢?中字符出现的次数,出现一次,对应位置加1。,在hash数组中字符对应的位置,存放。首先我们先对所有数,进行排序。依次取第一个和后两个组成一队。请看下面示例,结合上面理解。

2022-11-08 00:57:15 23581 9

原创 【Leetcode刷题】移除元素

左指针找等于val的元素,右指针找不是val的元素,将右边不等于val的元素覆盖左边等于val的元素。我们的第一种双向指针写法是同向的指针,既然可以改变元素的顺序,那我们可以定义一个双向指针。我们可以看到上面两种实现方法都没有改变元素的相对位置,但题目和我们说了,遍历数组,遇到等于val的数时,将数组后面的数往前移动,进行覆盖。快指针,取寻找不是val的值,将值赋值给慢指针指向的位置。既然是相向指针,那我们可以将数组的首元素下标当作。两层循环,第一层遍历数组,第二层更新数组。双向指针是如何操作的呢?

2022-09-08 13:05:08 22695 10

原创 【数据结构初阶】二叉树——堆的应用(堆排序 + TOP-K问题)

上一篇我们讲了二叉树的概念,以及堆的结构和实现。不了解的进行了解。本篇,博主分享的是堆的应用。

2022-09-07 18:35:33 4138 15

原创 【数据结构初阶】初始二叉树 -- (二叉树基础概念+二叉树的顺序结构及实现)

由于堆是用数组来存储的,所以定义的结构与顺序表相似,逻辑上是一个完全二叉树,物理上是一个数组的形式。int size;} HP;

2022-09-06 13:17:35 2047 21

原创 【链表OJ】二、反转链表

递归法相对于抽象一点,但是其实和迭代法是一样的逻辑,同样是当cur为空的时候循环结束。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。当我们将迭代法写出来后,理解递归法就不难了,代码逻辑都是一样的。定义一个新的链表,然后取结点进行头插。

2022-09-05 17:47:22 399 8

原创 【栈和队列OJ】一、有效的括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

2022-09-04 21:29:13 428 17

原创 【Leetcode刷题】搜索插入位置

遍历数组,找到第一个比target大的数,它的位置就是目标值将会插入的位置,所以返回它的下标。给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。若目标值在数组中,利用二分法查找目标值,这一种情况就不再多说了,若有不了解,从上面三种情况的例图来看,除了在数组中的元素外,其他三种情况只需返回。这时,目标值将会插入数组最后一个位置的下一个位置,返回4。这时,目标值将会插入2的位置,所以返回下标2。这时目标值将会插入0的位置,所以返回下标0。..

2022-08-31 10:06:41 484 15

原创 【Leetcode刷题】二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。(左闭右闭区间),根据区间的定义,就可以决定后续的代码如何控制条件。二分法就是按照这种方式实现快速排除查找的。第一种写法:我们每次查找的区间都是在。第二种写法:我们每次查找的区间在。其实二分法的思想很简单的。因为target定义在。...

2022-08-29 01:14:40 358 2

原创 【数据结构初阶】栈和队列(C语言实现+图解)

结构如下//指向为栈开辟的空间 int top;//指向栈顶,相当于顺序表中的size int capacity;//容量 } ST;//结点 typedef struct QueueNode {} QNode;//队列 typedef struct Queue {//记录链表的头 QNode * tail;//记录链表的尾 int size;//记录队列的元素个数 } Queue;队列需要两个指针标识队头和队尾,以便管理队列的元素。而队列元素即结点用单链表的结构实现即可。......

2022-08-27 22:30:45 1835 10

原创 【初阶数据结构】带头双向循环链表(C语言实现)

前篇已经说到,链表的结构可以分为八种:带头单向循环链表、带头单向非循环链表、带头双向循环链表、带头双向非循环链表、无头单向循环链表、无头单向非循环链表、无头双向循环链表、无头双向非循环链表。无头单向非循环链表(单链表)和带头双向循环链表。无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。...

2022-08-26 21:08:39 620 10

原创 【链表OJ】一、移除链表元素

当cur指针指向待移除的结点时,我们首先让prev指针指向的结点指向cur的下一个结点,然后将cur指针指向的结点释放掉,并将cur->next赋值给cur。,这个哨兵位头节点不存储让任何有效数据,并让链表原来的头指针指向该哨兵位头结点下一个,这样我们就不用判断待移除的结点是否为第一个结点了。​ 要移除某一结点,也就是让该结点的前一个结点指向待移除结点的后一个结点,然后将待移除的结点释放即可。这时我们需要将头指针指向cur结点的下一个结点,然后释放cur指向的结点,然后再将头结点赋给cur指针。......

2022-08-25 23:53:26 438 5

原创 【初阶数据结构】单链表(C语言实现+动图演示)

首先我们需要对单个结点进行定义就像这个图一样,一个空间存放数据,一个空间存放下一个结点的地址单链表在逻辑上是连续的,但在物理上不一定连续,可以做到按需所取,但不支持随机访问。上述实现单链表是传的二级指针,若不想传二级指针,可以使用以下两种方法:1.使用带头结点的链表,链表没有元素时头指针指向头结点,不需要对头指针修改2. 调用函数时以返回值的形式返回头指针,让头指针在调用时赋值(非常麻烦)

2022-08-25 01:41:19 1853 13

原创 【C语言初阶】初始C语言(2)

熟悉C语言的基础内容

2022-07-13 16:15:11 560

原创 【C++初阶】二、类和对象(上)

/ 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{ }中为类的主体,注意类定义结束时后面分号。类中的元素即变量和函数都称为类的成员:类中的数据称为类的属性或者成员变量;类中的函数称为类的方法或者成员函数class和struct。原因是C++兼容C里结构体的用法,同时结构体(struct)在C++中也升级成了类,类名可以直接作类型使用。类与结构体不同的地方在于,类中不仅可以定义变量,还可以定义方法或称函数。

2022-03-07 19:15:39 1268 11

原创 【C++初阶】一、C++入门基础(详细总结)

C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字(随自己定义),然后接一对{}即可,{}中即为命名空间的成员。注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

2022-03-01 23:02:09 15319 26

空空如也

空空如也

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

TA关注的人

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