自定义博客皮肤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)
  • 收藏
  • 关注

原创 【C++】手撕list(list的模拟实现)

我们在学习数据结构的时候,学过一个非常好用的结构,叫做带头双向循环链表,它不仅遍历非常地灵活方便,而且插入和删除操作的效率很高,弥补了单链表相较于数组的缺点。我们今天要讲的list模版底层就是带头双向循环链表。

2024-04-23 17:37:57 948

原创 【C++】list的介绍及使用说明

和"std::vector"一样,“std::list”实现不同类型数据的管理也是通过模版类的机制实现的。当创建一个list对象时,可以通过模版参数来指定存储的元素类型。使用""来显式实例化指定存储的元素类型,例如“std::list”表示存储整数类型的链表,“std::list”表示存储双精度浮点型的链表…………return 0;

2024-04-18 21:07:31 1019

原创 【C++】理解vector的底层原理并模拟实现(手撕vector)

但是我们不仅要会用,还要理解它的底层原理,今天我们通过手撕一个自己的vector,来进一步加深对vector容器的理解。

2024-04-03 18:51:11 837

原创 【C++】vector系列力扣刷题日志(136.只出现一次的数字,118.杨辉三角,26.删除有序数组中的重复项,260.只出现一次的数字 |||)

在实际运用中我们要熟悉vector的常见接口,在合适的场景中使用出来

2024-04-01 15:43:56 1001

原创 【C++】vector的介绍及使用说明(类模版的实现方式,顺序存储与动态数组,迭代器iterator的运用,vector的增删查改)

类模版"std::vector"实现不同类型数据的管理是通过类模版的机制实现的。当创建一个vector对象时,可以通过模版参数来指定存储的元素类型。使用""来显式实例化指定存储的元素类型,例如“std::vector”表示存储整数类型的向量,“std::vector”表示存储双精度浮点型的向量…………return 0;

2024-03-30 21:44:26 1412

原创 【Linux】进程状态(R运行状态、S睡眠状态、D磁盘休眠状态、T停止状态、X死亡状态)

进程的状态会随着操作系统的调度和外部事件的发生而不断地。例如,一个新创建的进程经过初始化后会进入,等待被调度执行;当调度器分配处理器资源给进程时,进程进入;如果进程发起了I/O操作,它可能会进入等待I/O完成;当I/O完成后,它重新回到等待再次执行;当进程执行完毕或被终止时,进程进入。进程状态的合理转换是操作系统正常运行的基础,也是实现多任务并发的关键。下面我们来理解进程的各个运行状态。

2024-03-27 22:07:39 1551

原创 【Linux】理解父子进程(系统调用创建进程,fork函数,写时拷贝)

父子进程是操作系统一个重要的概念,特别是在多任务处理和并发编程中,在Linux中,每个进程都有一个唯一的进程ID,并且每个进程都有可能。当一个进程创建了一个新的进程时,新创建的进程就成为了原始进程的子进程。同样用生活中的例子来理解。在一个家庭中(类比一个操作系统中),父母决定做晚饭(做饭就是一个进程),他们分配给孩子一个任务,让大儿子洗菜,小儿子烧水(洗菜和烧水就是两个子进程),父母和孩子之间相互协作,共同完成了这一顿晚饭,这就是父子进程之间和任务的特性。

2024-03-27 19:14:54 852

原创 【Linux】进程的基本概念(进程控制块,ps命令,top命令查看进程)

程序就像是一本菜谱,描述了如何准备一道菜的步骤、所需的食材以及烹饪方法,但它本身并不会做任何事情;而进程则是根据菜谱准备食物的实际过程,它是程序在执行过程中的动态实例。就像你可以同时烹饪多道菜一样,操作系统可以同时执行多个进程,每个进程都在独立地执行它们的指令,拥有自己的资源和状态。

2024-03-25 17:57:38 936

原创 【Linux】调试器-gdb的使用说明(调试器的配置,指令说明,调试过程说明)

在软件开发中,通常会为程序构建两种不同的版本:Debug模式和Release模式。它们之间的区别主要在于优化级别、调试信息、错误检查等方面

2024-03-21 11:47:48 1030

原创 【Linux】如何使用git命令行与远程仓库建立连接(以Gitee为例)

私有仓库是指代码仓库的访问权限受到限制,只有授权的用户才能访问其中的代码。私有仓库的所有权和访问权限由仓库的所有者控制,可以决定谁可以访问、修改和管理仓库,以确保代码的安全和保密性。添加该文件的主要目的是避免将不必要的文件提交到代码仓库中,从而保持仓库的清洁和安全。在软件开发中,设置模版指的是创建预定义的文本模版,用于规范化和简化团队成员在创建新的文档、问题等操作。开源仓库是指存放在公共平台上的代码仓库,其代码是公开可见的,任何人都可以查看复制修改仓库中的代码,也可以向仓库提交贡献。此时直接输入":q!

2024-03-20 17:29:06 1103

原创 【Linux】项目自动化构建工具-makefile/make

是一个特殊的目标名称,表示后续声明的目标都是伪目标,而不是实际文件。main是目标文件,就是使用make指令所生成的文件,main.o,utils.o是依赖文件,目标文件的形成依赖于这两个文件,通过指定的命令实现构建。text.c是我们想编译运行的源文件,我们在Makefile中已经定义好了构建规则和依赖关系,此时输入。此外,在Makefile中,可以使用‘$@’来表示目标文件,使用‘$^’来表示依赖文件。这里执行指令后,指令是会显示在终端的,如果想隐藏指令,可以在前面加上‘@’

2024-03-19 20:11:57 646

原创 【Linux】编译器-gcc/g++的使用(预处理、编译、汇编、连接)

gcc [选项] 要编译的文件 [选项] [目标文件]

2024-03-19 19:10:24 956

原创 【Linux】文本编辑器Vim(Vim的操作方法、命令集,Vim插件安装配置)

Vim(Vi IMproved)是一款强大的文本编辑器,是Unix系统中经典的Vi编辑器的增强版本。它在功能和灵活性方面超越了传统的Vi,并成为了许多开发者和系统管理员首选的编辑器。:Vim具有不同的工作模式,包括Normal模式、Insert模式、Visual模式等。每个模式下,按键的功能和行为都不相同。这种设计使得编辑过程更高效。:Vim可以通过编辑配置文件(.vimrc)来定制各种行为和快捷键。用户可以根据自己的喜好和需求进行个性化设置,以满足自己的工作习惯。

2024-03-09 17:29:18 1371

原创 【Linux】软件包管理器yum(命令行工具rz,sz)

我们手机电脑上的各种软件应用其实就是一个个的可执行程序(及其相关文件和资源的集合),打开应用的过程其实就是执行程序的过程,在执行程序之前,肯定要先对程序进行编译,但是如果每次打开应用都需要进行编译太麻烦了,所以就有了软件包。:rz 是用于接收文件(receive)的命令,当在终端上输入 rz 命令后,会弹出一个文件选择对话框,用于从本地计算机选择要传输的文件。最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念.整理。

2024-03-09 15:29:08 1305 1

原创 【Linux】权限管理(文件的访问者、类型和访问权限,chmod、chown、chgrp、umask,粘滞位)

在生活中,所有的个人财产都有它们各自的所有权人,非所有权人想要使用其个人财产需要征得所有权人的同意,就好比小时候我们借同桌的一块橡皮,需要征得他的同意才行,不然可能就会产生矛盾[doge]。linux下面的一切文件也是如此,所有文件都有各自的权限,其权限由访问者和访问权限构成。root 就是文件的访问者,访问者有不同类型,所以这里显示了两类访问者。-rw-r--r-- 就是文件的访问权限,下面会解释。目录的可执行权限 (x) 决定了用户是否可以在该目录下执行命令或者进入该目录。

2024-03-07 21:15:49 1268

原创 【Linux】常见指令2(more指令、less指令、head指令、tail指令、date指令、cal指令、find指令、grep指令、zip/unzip指令、tar指令、bc指令、uname -r)

more是一个用于逐页显示文本文件内容的命令行工具。它允许用户逐页浏览大型文本文件,以便更容易地查看和阅读文件内容。

2024-03-07 10:59:26 899

原创 【Linux】常见指令1(ls指令、pwd指令、cd指令、touch指令、mkdir指令、rmdir指令、man指令、cp指令、mv指令、cat指令)

说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命 令,经常用来备份文件或者目录。2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它 将所给的源文件或目录重命名为给定的目标文件名。:递归处理,将指定目录下的文件与子目录一并处理。

2024-03-05 19:44:01 656

原创 【C++】揭开运算符重载的神秘面纱

通过运算符重载,用户可以为自己创建的类或结构体定义与标准运算符相对应的操作,使得这些类型的对象可以使用像内置类型一样的简洁语法来执行操作。例如,对于自定义类Complexpublic:private:在上述例子中,通过重载运算符,我们使得Complex类的对象可以使用运算符执行相应的复数加法,使得代码更加直观和易读。运算符重载是一种强大的编程技术,允许用户定义的类型通过标准运算符执行自定义的操作。通过运算符重载,代码变得更加直观,可读性提高,使得类和对象的使用更加自然。

2023-12-22 16:39:43 803

原创 【C++】谈谈深拷贝与浅拷贝

深拷贝是指在对象赋值时,为对象的每一个指针成员分配新的内存,新的内存内存放源对象的副本。两个对象相互独立,对一个对象的修改不会影响到另一个对象。总的来说,深拷贝是一种更安全的拷贝方式,尤其在涉及到动态内存分配时,可以避免悬空指针和内存泄漏的问题。不过,具体选择深拷贝还是浅拷贝取决于具体的需求和对象的结构,有的情况下选择浅拷贝会更合适。

2023-12-20 21:37:18 390 1

原创 【C++】理解string类的核心理念(实现一个自己的string类)

实现自己的string类是学习 C++ 语言和面向对象编程的一个好方法。通过编写一个简单的字符串类,可以深入理解等核心理念。理解了string类的底层逻辑之后会发现,一些在上层看似复杂的操作在底层其实很简单。下面就让我们来实现一个自己的string类吧!

2023-12-20 16:43:56 991

原创 【C++】标准库中的string类

以上只是对string类的初步认识,想要继续深入了解它还需要经过大量的练习以及string类的自我实现,理解了它的底层原理才能更好地运用它,后续我也会继续推出有关string类的自我实现的博客,请期待一波~~

2023-12-18 22:34:13 944

原创 【C++】有关string类对象与迭代器的几道OJ题详解

为什么这里reverse内的参数是begin和x+1-k呢,原因是reverse内部第二个迭代器参数其实指向的是字符串最后一个元素的后一位,而x此时指向的是2k个元素中的第2k个元素,所以需要+1再-k,才能实现对前k个元素的翻转。根据题目要求,首先需要遍历字符串,我们用一个迭代器来实现遍历,还需要记录遍历的个数,用flag表示当遍历了2k个字符时,对前k个进行翻转,翻转的操作我们可以通过库函数。它的作用是创建一个指向字符串最后一个字符的反向迭代器,我们创建一个 it 变量用于接受迭代器的内容。

2023-12-18 18:41:30 986

原创 【C++】STL简介

(standard template libaray-标准模板库):C++编程语言的一个,它提供了一组通用的模板类和函数,以实现常见的数据结构和算法。STL的设计目标是提供一种高效、灵活和通用的编程工具,使C++开发人员能够更轻松地实现各种功能而不必从头开始编写代码。

2023-12-16 23:58:58 83

原创 【C++】模版的介绍与说明(模版实例化,模版参数,类模版)

我们在练习题目的时候总会遇到需要进行数据交换的情景,有时还需要进行多次交换,所以经验丰富的我们会建立一个函数来实现数据的交换,但是每次碰到相应题目都需要手搓一个交换函数,这样的工作显得单调又冗余,那么可不可以实现一个呢?对了,我们不是学过C++的使用函数重载固然可以实现,但是有以下不好的地方:重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。代码的可维护性比较低,一个出错可能所有的重载均出错。

2023-12-15 23:59:45 674

原创 【C++】内存泄漏(浅谈一下我对内存泄漏的看法)

C++ 内存泄漏是指在程序运行过程中,动态分配的内存未被正确释放,导致程序占用的内存不断增加,最终可能耗尽系统资源。以上内容涵盖了 C++ 内存管理的多个方面,可以帮助我们更好地理解内存泄漏,希望我们都能写出更加可靠和高效的代码。

2023-12-15 23:30:44 90

原创 【C++】内存管理

C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因 此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。

2023-12-14 16:47:06 97

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

定义时不添加static关键字,类中只是声明3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问4. 静态成员函数。

2023-12-11 16:22:31 176

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

默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。

2023-11-21 19:56:57 468

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

C++中通过类可以将数据以及操作数据的方法进行完美结合,通过访问权限可以控制那些方法在类外可以被调用,即封装,在使用时就像使用自己的成员一样,更符合人类对一件事物的认知。C++中的参数是编译器维护的,C语言中需用用户自己维护。

2023-05-30 17:12:18 1145

原创 【C++入门】auto关键字 与 基于范围的for循环(C++11)

当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对 第一个类型进行推导,然后用推导出来的类型定义其他变量。auto关键字方便我们声明和定义变量,特别是在变量类型特别复杂的时候C++11推出的新型for循环是基于范围,在一些情形下特别方便好用(有范围的集合)

2023-05-30 14:26:39 2869

原创 【C++入门】什么是内联函数?

inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。return 0;// 链接错误:main.obj : error LNK2019: 无法解析的外部符号 "void __cdecl f(int)" (?f@@YAXH@Z),该符号在函数 _main 中被引用内联函数是一种空间换时间的做法,当对程序执行效率有要求时,可以考虑使用。

2023-05-30 13:13:32 834

原创 【C++入门】什么是引用

目录一、引用概念二、引用特性三、常引用四、使用场景1. 做参数2. 做返回值五、传值,传引用效率比较六、引用和指针的区别 引用不是新定义一个变量,而是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间,它和引用的变量共用一块内存空间。比如:鲁迅,原名“周树人“,笔名“鲁迅”,小说里又称自己为”迅哥“。类型&引用变量名(对象名)= 引用实体;输出结果为:表示 a 与 ra 的值一样,址一样。注意:引用变量必须和引用实体是同种类型的。下面这种引用就不行: 输出结果为:表示 a,

2023-05-25 18:52:49 503

原创 【C++入门】缺省参数 与 函数重载

c++中,定义函数的时候可以让最右边的连续若干个参数有缺省值,在调用函数的时候,如果不写相应位置的参数,则调用的参数就为缺省值。自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真正的含义,即该词被重载了。 比如:以前有一个笑话,国内两个体育项目大家根本不用担心。一个是乒乓球,一个是男足。前者是”谁也赢不了!“,后者是”谁也赢不了!“

2023-05-19 14:12:05 158

原创 【C++入门】命名空间与标准输入输出

在c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。//定义命名空间A//定义命名空间Bint main()//输出命名空间A中的a的值//输出命名空间B中的a的值return 0;

2023-05-19 12:41:14 161

原创 【C语言数据结构】详解栈与队列(下)(栈与队列相互实现、循环队列)

我们已经知道,队列遵循FIFO(先进先出)原则,而栈遵循FILO(先进后出)原则,想用栈来实现队列的先进先出,可以用两个栈,一个来模拟入队列,一个来模拟出队列。我们从空栈来入队列,假设我们先入1,2,3三个数,此时我们要出队列,要出两个数,该怎么做呢。首先我们把栈1中的数全部挪到栈2中,挪动方式遵循出入栈的原则。然后把S2栈顶的两个数据出栈即可我们可以验证一下,1先入队,然后是2和3,出队列的先是1,然后是2,符合先进先出原则。

2023-05-04 16:57:50 498

原创 【C语言数据结构】详解栈与队列(上)(栈与队列的实现)

其次需要定义一个结构体,结构体内应包含:1个指数据存储数组的指针,2个分别表示队头和队尾的整形变量,由于需要动态开辟空间,所以还需要1个表示容量的整形变量。其次需要定义一个结构体,结构体内应包含:1个指数据存储数组的指针,1个表示堆顶的整形变量,由于需要动态开辟空间,所以还需要1个表示容量的整形变量。原则,第一个出队列的应该是“1”,在数组中,我们通过挪动数据的方法将第一个数据进行覆盖,这样就实现了出队列,时间复杂度。,空队列就直接报错,这种方法的好处是可以及时发现程序的问题,找出错误信息。

2023-04-28 11:30:54 373 2

原创 【C语言数据结构】堆排序详解(二叉树之堆的排序)

堆排序就是利用堆的思想来进行排序,总共分为两个步骤:1.建堆 升序建大堆; 降序建小堆2.利用堆删除的思想来进行排序 利用向下调整操作为什么? 根结点最大叫做大堆,根结点最小叫做小堆。升序是要让根结点最小之后依次递增,降序是要让根结点最大之后依次递减。照这么看升序建小堆,降序建大堆才更合理。誒,可不敢想简单了,我们需要从堆的结构入手考虑: 上一篇我有写到大堆的实现,其中大堆的删除中用到了向下调整操作,就是把堆顶放到堆尾进行删除,再将堆进行

2023-04-21 11:47:07 987 1

原创 【C语言数据结构】堆的实现(详解二叉树之以堆为例)

堆的实现由数组完成,确切的说是以顺序表的方式完成,堆在逻辑上是一棵数,而现实中是一个顺序表。顺序表中定义的结构通常由一个存放数据的数组,两个分别表示当前存放的位置以及容量的整形组成。当然我们要把存放的数据类型进行重命名。int size;}Hp;结点定义好之后我们就要想堆该具备的功能。首先定义完一个堆之后需要将堆中的元素进行初始化,所以我们需要一个初始化函数。

2023-04-19 18:39:56 505 2

原创 【LINUX】环境搭建(以云服务器为例)

打开链接之后,拉到下面,在姓名邮箱那一栏填写完正确信息之后,选择 “只需xshell” 点击下载之后会在你的邮箱收到下载链接点击之后会自动下载,结束后会自动打开xshell界面。

2023-04-17 20:24:09 321 4

原创 【C语言数据结构】二叉树入门(求叶子节点数,求总结点数,求深度,满二叉树与完全二叉树)

1.n0=n2+12.完全二叉树中,n1=0或13.满二叉树中,深度为n,结点数为2^n-1;结点数为k,深度为log(k+1)4.任意二叉树中,结点数的范围是2^(n-1) ~ 2^n-1。

2023-04-17 19:19:42 2136 4

空空如也

空空如也

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

TA关注的人

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