- 博客(51)
- 收藏
- 关注
原创 c++进阶之----orderedmap和unorderedmap
适用于需要存储键值对的场景,查找、插入和删除效率高。:适用于需要存储唯一值的场景,判断元素是否存在效率高。两者都基于哈希表实现,因此在需要高效查找的场景下非常有用。
2025-04-02 21:50:08
590
原创 c++进阶之------红黑树
红黑树(Red-Black Tree)是一种自平衡二叉查找树,它在计算机科学的许多领域中都有广泛应用,比如Java中的TreeMap和C++中的set/map等数据结构的底层实现。红黑树通过在每个节点上增加一个颜色属性(红色或黑色),并遵循一定的规则来确保树的平衡性,从而保证了各项操作的时间复杂度为O(log n)。
2025-03-22 21:23:43
802
2
原创 Linux第六讲----git与gdb
打开gitee,新建仓库按下图操作:之后点创建在点击橙色的克隆下载:并复制之后登录xshell并进入家目录输入git clone 右键粘贴如下图所示之后我们进入for_delete创建一个文件,code.c,输入如下内容之后会发现多了一个.git文件,这个就是我们本地仓库之后将其添加到仓库里之后在推送一下-m后加你想说的内容实际上,这一步是将本地仓库与远端的同步一下之后push一下,输入用户名和密码(gitee账号名和密码)
2025-03-17 13:00:27
615
2
原创 Linux第五讲----gcc与g++,makefile/make
验证一下:所以我们将代码改造一下:这样我们便可以按照所需改造代码了简化:$@代表$(BIN),$^代表$(SRC) (:右边的所有内容)所以最终我们将其写成这个形式但是倘若我们有很多code.c,一次一次写很麻烦,所以我们改进一下:用wildcard(目标文件列表)这样就不用担心多个文件了。
2025-03-04 13:52:14
1070
3
原创 c++进阶之----set和map
在C++中,std::map是一个非常强大的容器,属于标准模板库(STL)的一部分。它是一个基于红黑树实现的关联容器,用于存储键值对(key-value),并且保证键的唯一性。在C++中,std::pair是一个非常实用的模板类,用于将两个不同类型的数据组合在一起。它属于标准模板库(STL)的一部分,通常用于需要同时处理两个相关数据的场景。std::pairfirst:存储第一个数据。second:存储第二个数据。std::map的[]运算符是一种非常重要的成员函数,用于访问或插入元素。1)如果key。
2025-03-02 21:48:40
1060
2
原创 linux第四讲----基础开发工具vim
vim是一个多模式的编辑器,总共有6种模式,这里我们介绍其中三种,命令模式,插入模式,还有底行模式,打开时默认进入命令模式!
2025-02-28 18:33:45
1038
2
原创 c++进阶之----二叉搜索树
二叉搜索树(Binary Search Tree,BST)是一种特殊的二叉树结构,具有以下性质:1)若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点的值。2)若任意节点的右子树不为空,则右子树上所有节点的值均大于它的根节点的值。3)任意节点的左子树、右子树均为二叉搜索树。
2025-02-26 22:15:31
890
7
原创 Linux第三讲----用户权限(二)
由于一些原因,我将centos更换为了ubuntu,但是这些指令的操作都是一样的!在上一篇文章中,我们已经了解了基本的权限操作,在此篇文章中,我们将继续深入探讨下权限!
2025-02-24 13:29:12
791
5
原创 c++之多态
多态分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要就是我们前面讲的函数重载和函数模板,他们传不同类型的参数就可以调用不同的函数,通过参数不同达到多种形态。示例代码如下所示:1)函数重载2)函数模板运行时多态,具体点就是去完成某个行为(函数),可以传不同的对象就会完成不同的行为,就达到多种形态。也就是说,是在程序运行时才确定函数调用的具体实现形式,主要通过虚函数和继承机制实现。
2025-02-21 18:29:02
625
5
原创 c++进阶———继承
在一些大的项目中,我们可能要重复定义一些类,但是很麻烦,应该怎么办呢?举个简单的例子,我要做一个全校师生统计表,统计学号,教师编号,姓名,年龄,电话,联系方式等等,这些内容仅有一点点不同,如果我先定义一个教师类,私有成员包括上述与教师相关的内容,在定义一个学生类,私有成员也包含上述与学生相关的内容,这样会显得十分麻烦,而且重复定义,浪费时间。我们不如在这里引入一个新的概念:继承。
2025-02-19 23:12:28
886
3
原创 项目实践之----贪吃蛇小游戏
在我们学习完C语言的相关知识后,我们可以尝试写一些简单的程序代码了,如本文所将要实现的贪吃蛇小游戏,以及未来我会陆续更新一些其他其他应用程序的代码,如:学生管理系统的实现(高仿网页版本),扫雷小游戏等等。
2025-02-10 15:08:13
980
2
原创 c++中priority_queue的应用及模拟实现
priority_queue除了直接用于排序元素之外,还能用于自定义比较函数,来改变元素的优先级顺序例如,如果你想让优先队列按照元素的某个属性排序,可以定义一个比较函数class datepublic:,_day(day){}private:int _year;int _month;int _day;
2025-02-05 19:18:15
307
1
原创 c++之模板进阶
【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2025-02-03 23:04:46
883
4
原创 c++中stack和queue的模拟实现
在数据结构专栏中,我们曾模拟实现了stack和queue,但是实现过程却十分复杂,而在本文,我们用c++提供的已知容器来实现栈和队列,将会轻松许多!
2025-02-02 12:28:23
242
原创 Linux第一讲--基本的命令操作
11.添加用户:adduser +名字密码:passwd + 刚才的名字(输入密码时,光标不会动的)消除账户:userdel -r +名字功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-l 列出文件的详细信息d 将目录像文件⼀样显示,而不是显示其下的文件。如:ls ‒d 指定目录2.pwd指令功能:显示用户当前所在的目录3. cd指令功能:改变工作目录。
2025-01-25 21:51:48
1256
3
原创 c++之List容器的模拟实现
在之前的数据结构中,我们曾模拟实现过链表的数据结构,但是十分麻烦,全篇都暴露了链表的底层结构-----指针,但是从使用的角度,使用者并不关心你用的底层结构是啥,而且编写者也不愿意将所有的底层结构暴露出来,为此,在此文章中,我们将充分发挥c++的优势,将指针包装一下,变为迭代器。
2025-01-22 17:57:41
1301
3
原创 c++之list容器
我们这里的List(链表)是带头双向循环链表,这一点在下一篇文章的对list的模拟实现是至关重要的,本篇文章主要讲解的是c++自带的list的相关接口!
2025-01-21 14:29:05
656
6
原创 c++之vector
由于vector和string 非常相似,在这里我们讲简单对其进行讲解,其基本用法都是一样的,只不过是这次不是字符串了而是顺序表。
2024-12-05 16:11:31
834
3
原创 string类函数的手动实现
在上一篇文章中,我们讲解了一些string类的函数,但是对于我们要熟练掌握c++是远远不够的,今天,我将手动实现一下这些函数~注意:本篇文章中会大量应用复用,这是一种很巧妙的方法和以往一样,还是分为string.h string.cpp test.cpp三个文件为了保证完整性,string.h我统一放在这。
2024-12-03 14:15:55
849
3
原创 string类自带函数的的应用
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,后来这个 1.2 string类对象的常见构造 1.2.1 string类对象的容量操作 函数名称 功能说明 size(重点) 返回字符串有效字符长度 length 返回字符串有效字符长度 capacity 返回空间总大小
2024-11-28 18:42:59
1000
1
原创 c++初阶之模板初阶
用来定义模板参数切记:不能使用struct代替class),对于模板函数的使用,以供调用。,对于字符类型也是如此。,称为函数模板的。。1.此时代码没什么问题,结果也对:但是当我们在加上一条让a和c相加呢?会发现报错了~该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型通过实参a将T推演为int,通过实参c将T推演为double类型,但模板参数列表中只有一个T,编译器无法确定此处到底该将T确定为int或者double类型而报错。
2024-11-25 15:11:55
734
5
原创 c++的内存管理
new/delete和最大区别是new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数内置类型是几乎是一样的。
2024-11-23 21:35:35
876
3
原创 类和对象(下)
1.取地址运算符重载1.取地址运算符重载1.1const成员函数•将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后⾯。•const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。const 修饰Date类的Print成员函数,Print隐含的this指针由变为const1.2 const。
2024-11-23 20:15:17
2085
2
原创 类和对象(中)
C++规定对象在销毁时会自动调用析构函数,完成对象中资源的清理释放工作。析构函数的功能类比我们之前Stack实现的Destroy功能,而像Date没有Destroy,其实就是没有资源需要释放,也就是说只有经过动态开辟的才需要写析构,如上述例子中,日期类是不需要写析构的,栈需要写!
2024-11-17 14:47:46
1043
6
原创 类和对象(上)
编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this 指针。类定义了⼀个新的作用域,类的所有成员都在类的作⽤域中,在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是。类的成员函数中访问成员变量,本质都是通过this指针访问的,如Init函数中给_year赋值,类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或。
2024-11-14 10:03:10
835
2
原创 初阶C++之C++入门基础
1.C++的第⼀个程序大家好!欢迎来到C++篇学习,这篇文章的内容不会很难,为c++的引入,c++的重点内容将在第二篇的文章中讲解,届时难度会陡然上升,请做好准备!我们先看网络上的一个梗:21天内⾃学精通C++好了,现在我们要开始写第一个c++程序了:hello world1.C++的第⼀个程序。
2024-11-13 20:20:28
1084
2
原创 数据结构之二叉树的收尾(性质)
1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )当n1=1时,2n0+n1-1=2n可化简为n0=n。答案:画出二叉树的结构图,由前序遍历--根左右,此题选A。提示: 用n<=2^h-1求解,设h=9和h=10求解。某二叉树的后序遍历序列与中序遍历序列相同,均为。2n0+n1-1=2n可化简为n0=n+1/2。得到2n0+n1-1=2n。提示:用 n0+n1+n2=767,2 + 1,讨论n1=0 and 1。解: 因为n0+n1+n2=2n,
2024-11-01 14:07:31
423
1
原创 数据结构之链式结构二叉树的实现(进阶版)
本篇文章主要讲解链式二叉树的层序遍历以及判断是否为一棵完全二叉树二者将会用到之前学过的队列知识,是将队列和二叉树的整合。
2024-10-30 20:12:16
364
3
原创 数据结构之链式结构二叉树的实现(初级版)
1)前序遍历(Preorder Traversal 亦称先序遍历):访问根结点的操作发生在遍历其左右子树之前。2)中序遍历(Inorder Traversal):访问根结点的操作发生在遍历其左右子树之中(间)3)后序遍历(Postorder Traversal):访问根结点的操作发生在遍历其左右子树之后。访问顺序为:根结点、左子树、右子树。访问顺序为:左子树、根结点、右子树。访问顺序为:左子树、右子树、根结点。
2024-10-30 13:22:10
333
2
原创 数据结构之堆的实现以及性质和应用
1.实现顺序结构二叉树上篇文章()介绍了什么是二叉树以及堆的概念,在这篇文章中我们将进一步实现堆及其应用1.实现顺序结构二叉树⼀般堆使用顺序结构的数组来存储数据,堆是⼀种特殊的⼆叉树,具有⼆叉树的特性的同时,还具备其他的特性。1.1堆的概念与结构如果有⼀个关键码的集合 ,把它的所有元素按完全⼆叉树的顺序存储方式存储,在⼀个⼀维数组中,并满足:i = 012...,则称为小堆(或大堆)。将根结点最大的堆叫做最⼤堆或⼤根堆,根结点最⼩的堆叫做最小堆或小根堆。💡⼆叉树性质•。
2024-10-26 17:46:56
795
2
原创 数据结构之堆和二叉树的简介
现实中我们通常把堆(⼀种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,⼀个是数据结构,⼀个是操作系统中管理内存的⼀块区域分段。1.父结点/双亲结点:若⼀个结点含有子结点,则这个结点称为其子结点的父结点;2.子结点/孩子结点:⼀个结点含有的子树的根结点称为该结点的⼦结点;在树形结构中,我们最常用的就是二叉树,二叉树是结点的⼀个有限集合,该集合由⼀个根结点。8.结点的层次:从根开始定义起,根为第 1 层,根的子结点为第 2 层,以此类推;如上图:树的度为 6。
2024-10-26 14:24:42
1039
1
原创 数据结构之栈和队列
栈:⼀种特殊的线性表,其只允许在固定的⼀端进行插入和删除元素操作。栈的实现⼀般可以使⽤数组或者链表实现,相对而言数组的结构实现更优⼀些。概念:只允许在⼀端进行插入数据操作,在另⼀端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。和之前一样,还是分为三个文件,queue.h 、queue.c 、test.c。这是stack.h文件。
2024-10-20 21:37:57
661
4
原创 数据源结构之双链表的增删查改
在这里,由于双链表和单链表的基本逻辑是一样的,我将只保留重要部分的注释,详情逻辑请参考单链表!注意:这里的“带头”跟前⾯我们说的“头结点”是两个概念,实际前面的在单链表阶段称呼不严。带头链表里的头结点,实际为“哨兵位”,哨兵位结点不存储任何有效元素,只是站在这里“放哨。谨,但是为了更好的理解就直接称为单链表的头结点。和之前一样,我们还是创建三个文件。这是list.h文件。这是list.c文件。这是Test.c文件。
2024-10-17 14:45:36
393
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人