- 博客(46)
- 收藏
- 关注
原创 【Linux入门】基本指令(二)
使用指令echo + 字符串 就能直接将字符串直接输出到屏幕上,如下图然而,echo不止能这样使用,还有重定向操作,在这之前先了解一个知识点知识点一:一切皆文件在Linux系统中,一切皆文件。即使是键盘、显示器也都是文件,所谓printf/scanf等输出写入操作本质而言也就是文件操作,无非是操作的对象是键盘、显示器这些设备文件而已。
2024-10-24 20:32:00 823
原创 【C++】二叉搜索树(介绍+模拟实现)
节点的左子树中所有节点的值都小于该节点的值节点的右子树中所有节点的值都大于该节点的值左右子树也分别为二叉搜索树二叉搜索树中可以插入重复的键值,这取决于不同的场景。在一些实现中,如STL中set和map不允许重复键值,而multiset和multimap则允许重复键值。
2024-10-11 10:35:46 901
原创 【C++】多态练习题(面试常考)
1.关于虚函数说法正确的是( )A.被virtual修饰的函数称为虚函数B.虚函数的作用是用来实现多态C.虚函数在类中声明和类外定义时候,都必须加虚拟关键字D.静态虚成员函数没有this指针答案:B对于A,必须是被virtual修饰的成员函数;对于C,虚函数不能在类外定义;对于D,不存在静态虚函数这种说法,static和virtual不能同时修饰一个成员函数2.关于不能设置成虚函数的说法正确的是( )A.友元函数可以作为虚函数,因为友元函数出现在类中B.成员函数都可以设置为虚函数。
2024-09-30 10:18:22 978
原创 【C++】多态:深度剖析(多态、虚函数、抽象类、底层原理)
多态的实现通常依赖于虚函数。在基类(父类)中声明虚函数,然后在派生类(子类)中进行重写(覆盖)。通过基类指针或引用调用虚函数时,将根据对象的实际类型调用相应的派生类函数必须通过基类的指针或者引用调用函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写那么,什么是虚函数?接下来就对虚函数进行深度解析。
2024-09-23 10:16:16 706
原创 【Linux入门】基本指令(一)
注:这里是登录root账户,若要登录其他用户账户,使用ssh [用户名]@[IP地址]即可。如果在使用ls命令时不指定目录或文件名,它将默认列出当前工作目录下的文件和子目录,相当于。为新创建的用户设置密码,否则系统生成的默认密码是不确定的(注意密码不会在屏幕上显示)这样的文件默认情况下不会被ls命令显示出,需要使用ls -a才能显示出来。用法:cp [选项] [源文件或目录] [目标文件或目录]用于新建一个不存在的文件,或者改变文档或目录的日期时间。用法:rm [选项][文件、目录名称]
2024-09-20 10:00:00 664
原创 【C++】继承:深度剖析
此时就出现了一个问题,类D的实例化对象中,既有B类也有C类,然而B和C都有A类,那么此时D中就出现了两个A类,造成了数据冗余,于是可以使用虚拟继承来解决。子类和父类中有同名成员时,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义(在子类成员函数中,可以使用 基类::基类成员 显式访问)例如:在师生关系中,学生和老师的共同信息有:姓名,性别,年龄,身高等,同时学生又有一些特有的信息:学号,学院等,老师也有特有信息:工号,所教科目等。友元关系不能继承,父类友元不能访问子类的私有和保护成员。
2024-09-12 10:00:00 1689 2
原创 【C++】模板:进阶(仿函数深度剖析)
仿函数本质就是一个类,此类中重载了运算() ,因此它使用起来就和函数很像,就叫仿函数在之前了解的优先级队列中,有这样一个缺省参数叫less,其实这就是一个仿函数,它会将优先级队列变成大堆,同样在标准库的sort中也使用了less,默认排出的升序。与less对应的是greater,它和less相反,greater将优先级队列变成小堆,sort变成降序。
2024-09-10 10:00:00 832
原创 【C++】栈和队列、优先级队列、适配器原理
无论是栈还是队列,其模板参数中都有一个Container,缺省值为deque,这里就要引入一个叫做“适配器”的概念deque又被称作双端队列,是一种双开口的“连续”空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,同时时间复杂度都为O(1),与vector比较,头插效率高,不需要频繁挪动元素,而与list相比则空间利用率比较高接下来看看deque的对应接口:可以发现deque不仅既有头插尾插,头删尾删,并且还支持方括号[]访问 ,难道它底层也是连续的物理空间吗?
2024-09-08 10:00:00 1908
原创 【C++】list类:模拟实现(适合新手的手撕list)
利用临时对象来进行拷贝构造实际上是一种精妙的方法,它先定义了一个临时变量tmp,利用迭代器区间构造深拷贝了x的所有值,随后将新创建节点的_head以及_size跟tmp交换即可,同时,出了作用域以后tmp作为临时对象就会销毁,调用析构函数,由于此时已经交换了,那么此时实际实在销毁原先新节点的内存。指的注意的是,本来使用该迭代器需要用第一个->来找到data(当储存结构体类型时),然后再使用一个->才能查找到结构体内部的数据,但编译器为了代码的可读性,帮助我们省略了一个箭头,只需要一个箭头就可以访问数据了。
2024-09-06 10:00:00 799 1
原创 【C++】容器list常用接口详解
list是一个带头双向循环链表由于是链表,物理空间不连续,不支持随机访问数据,因此和vector相比,少了[]访问和resize、reserve等容量相关的函数与其他序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。
2024-09-04 11:41:01 924 1
原创 【C++】vector迭代器失效问题
/构造一个1,2,3,4构成的vectori < 5;i++)//找到其中3这个值的位置这就是一个典型的迭代器失效问题,要弄清楚为什么,首先我们需要清楚一点:vector的每一次扩容都不是在原地扩容,而是新开辟一块空间后将原先的数据拷贝到新空间而这就产生了一个问题,第一次insert的pos是表示3的位置,但第二次insert时pos还是表示3的位置吗?
2024-09-02 10:00:00 1822 3
原创 【C++】容器vector常用接口详解
vector是表示可变大小数组的序列容器就像数组一样,vector也采用的是连续储存空间,这意味着可以采用下标对vector的元素进行访问,和数组一样高效。但和数组又有不同,它的大小是可以动态改变的,而且它的大小会被容器自动处理本质讲,vector使用动态分配数组来储存它的元素。当有新元素插入时,为了增加储存空间这个数组需要重新分配大小,其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因此,每当一个新的元素加入到容器时,vector并不会每次都重新分配大小。
2024-08-31 10:00:00 1128
原创 【C++】string类:模拟实现(适合新手的手撕string)
本文承接上文对C++string类的标准库介绍,亲自来模拟实现下string类的简单功能
2024-08-22 10:00:00 853
原创 【C++】String类:标准库介绍
在C语言中,字符串是以'\0'结尾的字符数组,需要手动管理内存和处理字符串操作。在头文件string.h中提供了一系列库函数,如strlen、strcpy、strcat等来对字符串进行操作。但这些函数和字符串是分离的,需要手动管理内存,容易出现越界访问等问题。因此,在C++标准库中,提供了string类,它封装了字符串操作,提供了丰富的成员函数和运算符重载,使得字符串的操作更加方便和安全。
2024-08-20 10:00:00 957
原创 【C++】内存管理(使用+底层原理解析)
return 0;根据上图展示的结果,可以发现使用new关键字来开辟空间时会自动调用构造函数,同时delete也会自动调用析构函数 ,这就是new/delete与malloc/free的最大区别,因此,在内置类型时两者几乎相同,但对于自定义类型而言,就更推荐使用new/delete了。
2024-08-07 10:00:00 1614
原创 【C++】模版:范式编程、函数模板、类模板
为了应对以上问题,应运而生。就像活字印刷中的模板一样,根据模板能够印出对应的字,根据颜料的不同,又能印出颜色不同的字,放在C++中也是同理,存在模板这样一个模具,在这个模具中填入不同材料(类型),得到不同的结果,这就是范式编程。
2024-08-04 10:00:00 1084
原创 【C++】类和对象(下):初始化列表、类型转换、友元
内部类默认是外部类的友元类,内部类本质是一种封装,当A类和B类紧密关联,A类的实现就是为了给B类使用那么就可以考虑把A设计为B的内部类,若放到private/protected位置,就是专属内部类,其他地方无法访问。
2024-07-20 10:00:00 1820
原创 【C++】类和对象(中):构造、析构、拷贝构造、运算符重载
由于上述特性,在写拷贝构造时,参数一定要写正确,是类类型的引用,不是引用而是传值传参:Date(const Date d)则会引发无穷递归当使用Date d2(d1)时是调用拷贝构造函数,调用函数先要传参,这里传参d1对应的是Date类型,也就是。
2024-07-18 10:00:00 885
原创 【C++】类和对象(上):类、实例化、this指针
众所周知,C语言是面向过程的语言,对于每一个过程都有一个对应的函数来实现,每个函数都相对独立,但随着计算机发展,问题的场景也越来越复杂,面向过程在大型系统开发中捉襟见肘,面向对象思想运营而生。其核心思想是:随着系统参与的实体越来越多,过程变得越来越复杂,那么就不必费力去描述每一个可能的过程了,转而描述每一个实体,如果每一个实体都被正确描述了,那么这些实体置于系统中,系统就能正确运行。C++作为面向对象的编程语言,描述每一个现实世界的实体都可以使用关键字Class(类)来进行定义。
2024-07-16 10:00:00 1097
原创 【C++】入门基础(引用、inline、nullptr)
引用不是新定义一个变量,而是给已经存在的变量取一个别名,,它和它引用的变量共用同一块内存空间。简单来说,引用就是起别名,例如水浒传中林冲又名豹子头,这就是取别名,同时,林冲死了也就意味着豹子头死了,两者指向的都是同一个人。
2024-07-14 10:00:00 635
原创 【C++】入门基础(命名空间、缺省参数、函数重载)
使用namespace关键字定义一个域,这个域跟全局域各自独立,不同的域中可以定义相同名字的变量,这就避免的命名的冲突。其中C++标准库都放在一个叫std(standard)的命名空间中。例如以下代码:同一个名的变量rand在不同域中表现不同的内容TIPs:cout
2024-07-12 18:36:13 1118
原创 【排序算法】计数排序
存在负数的情况,max-min+1仍然得到的是正的范围。如9-(-5)+1 = 15,此时仍然保持相对映射,min = -5时,-5对应的下标为-5-(-5)= 0,即min对应的始终是下标为0的位置,其余相对同理,因此计数排序是可以排负数的。
2024-07-11 15:49:14 527
原创 【排序算法】归并排序
依据二分往下递归,类似于二叉树,总共有LogN层,每层总的归并合计起来可以看作O(N),因此总的时间复杂度可以看作是:O(N*logN)
2024-07-10 17:25:13 437
原创 【排序算法】快速排序(详解+各版本实现)
快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序②时间复杂度:O(N*logN)关于时间复杂度,可以这样简单解释:若递归调用的展开是二分的,就很类似于二叉树的结构,那么就存在logN层,每层遍历的时间复杂度为O(N),因此总的时间复杂度可以看为O(N*logN),当然这只是一种简单的解释,方便记忆。
2024-07-09 11:51:51 1485
原创 【排序算法】插入排序(希尔排序)
直接插入排序是一种简单的插入排序法,其核心思想是对一个已经有序的序列插入一个数据,该数据依次比较有序序列中的值,直到插入到合适的位置。在我们玩扑克牌整理牌序的时候,用到的就是直接插入排序的思想。
2024-07-07 10:00:00 730
原创 【数据结构】二叉树的实现
那么以上图为例进行前序遍历,首先访问根(1),然后访问左子树(2开始往下),2也是根节点,访问根(2),然后访问左子树(3往下),3也是根节点,访问根(3),然后访问左子树(N),为NULL返回,再访问右子树(N),为NULL返回,此时3的根左右子树都已经访问完,继续往上返回,访问2的右子树(N),为NULL返回,继而继续访问1的右子树(4往下),同理,最终得到访问顺序为:123NNN45NN6NN。如下图所示,可以看见,在出NULL时,队列已经为空,那么这就可以作为是否是完全二叉树的一个判断标准。
2024-07-05 10:00:00 997
原创 【数据结构】建堆的时间复杂度
层数一定时,在二叉树节点个数最大的情况下,二叉树为满二叉树,如下图所示,可以清晰地看到在满二叉树中第h层有2^(h-1)个节点,总节点N就等于一个等比数列的求和,运用等比数列求和公式可以得到:N = 2^h - 1当然还得考虑节点最少的情况,此时第h-1层仍是满节点的,第h层只有一个节点,此时,可以使用上述公式得到h-1层满二叉树总节点为2^(h-1) - 1个,再加上第h层的1个节点,总节点N = 2^(h-1)个。
2024-07-04 10:00:00 941
原创 【数据结构】栈和队列-相互实现OJ题
本题目是关于栈和队列的OJ题目,需对栈和队列有一定了解再进行做题,若不了解可以根据我之前这篇文章进行学习:【数据结构】栈和队列-CSDN博客,题中需要的栈和队列的实现也在该文章中有源代码
2024-07-01 19:11:59 766
原创 【MySQL】数据库-图书管理系统(C/C++实现)
该图书管理系统设计提供基本的设计模版,涉及数据库的等操作,包含登录功能,图书管理功能,图书借阅功能,用户管理功能等基础功能,详细功能查看以下菜单表,共包含三个菜单,登录菜单,管理员菜单和用户菜单。
2024-07-01 10:18:01 1847
原创 【数据结构】二叉树-堆
本文全面介绍了堆这一数据结构的基本概念、性质和实现方法。首先,文章对树的概念和性质进行了概述,为理解堆的结构打下基础。接着,详细阐述了二叉树的概念及其实现,为后续深入堆的讨论提供了必要的背景知识。文章的第三部分深入探讨了堆的概念和结构,区分了最大堆和最小堆,并解释了它们各自的性质。第四部分详细描述了堆的实现过程,包括向下调整算法、堆的创建、向上调整算法以及堆的删除操作,为读者提供了堆操作的具体步骤和逻辑。第五部分介绍了堆排序算法,这是一种利用堆结构进行数据排序的有效方法。最后,文章提供了堆的源码示例
2024-06-04 10:00:00 1874
原创 【数据结构】栈和队列
栈,作为一种特殊的线性表,对栈(Stack)的结构体的定义完全可以参考线性表的构成。链表和数组实现都可以,这里就使用了动态顺序表的构造方法。【C语言】顺序表(原理+实现)-CSDN博客//定义存储数据的类型//定义栈int top;}ST;队列即可以用数组实现也可以用链表实现。但使用链表的结构更优秀一些,原因在于如果使用数组,那么在对队头的处理就比较麻烦,删除下标为0的元素后,还需要整体前移,效率比较低。//定义数据类型//定义链表的节点}QNode;//定义队列。
2024-05-14 10:00:00 871
原创 【数据结构】带环链表(详解+拓展)
带环链表尾节点的next指针指向其他节点,因此遍历一个带环链表将是一个死循环,这是带环链表的基本特征,如示例所示。
2024-04-30 10:00:00 574 1
原创 【C语言】贪吃蛇小项目实战
以下的贪吃蛇实现基于控制台程序,如果选择终端无法达到效果,可以在如下图处进行修改,修改为windows控制台主机。修改成功后可以看见如下效果:我们可以使⽤cmd命令来设置控制台窗口的长宽和名称:格式分别是title 和mode con cols=x lines=y。
2024-04-20 12:00:00 992 2
原创 【C语言】链表(原理+实现)
链表是线性表的一种,与顺序表不同的是,链表在物理存储结构上不连续,在逻辑结构上连续。链表中数据元素的逻辑结构是通过实现的。链表的结构跟火车车厢类似,链表的每一个节点都是独立的,如同火车的车厢一样,火车的车厢可随时进行拆卸,链表的单独一个节点也是可随时根据需求进行创建和销毁。所有车厢可以链接成一个整体,链表的节点也是,通过一个个指针将各个节点链接。如此,那么一个节点的结构体类型就能进行定义了, 该节点需要包含两个内容:数据data和指向下一个节点的指针next。
2024-04-09 10:00:00 1389
原创 【C语言】顺序表(原理+实现)
是n个具有相同特性的数据元素的有限序列。线性表在逻辑上是线性结构,就如同一条连续的直线,但是在物理结构上不一定是连续的。是线性表的一种,但顺序表不仅在逻辑上是线性的,它在物理上同样是线性的。顺序表的底层结构是数组,数组本身就是同一类型数据的集合,顺序表在对数组的封装上实现了常用的增删改查等接口。
2024-04-05 13:29:30 1444 1
原创 【C语言】文件操作详解
程序的数据是储存在内存中的,一旦程序结束,内存回收,数据就丢失,无法长久地储存数据,因此出现了文件这一概念。磁盘(硬盘)上的文件是文件,就按功能进行分类,可以分为两种,程序文件包括源文件程序(.c),目标文件(.obj),可执行程序(.exe)等,本文讨论的是数据文件。
2024-03-31 10:41:29 1287 1
原创 编译与链接(详细图解)
从写代码到输出结果,存在两个不同的环境,即翻译环境和运行环境。在翻译环境中将源代码转化为可执行的机器指令(二进制指令),在执行环境中才是实际执行代码。其中翻译环境又包括编译和链接两大过程,编译包括:预编译,编译,汇编。运行环境就是生成可执行程序,而后产生输出结果。下图大致能展现整个过程。在C语言的项目中,多个.c文件每个单独经过编译器,各自生成对应的目标文件,也就是.obj为后缀的目标文件(Linux中为.o),多个目标文件和链接库一起经过链接器处理得到可执行程序,这就是C语言中编译链接的基本过程。
2024-03-29 18:54:04 475 1
原创 结构体通关指南
在C语言中有各种不同的类型,根据我们需要选择合适的类型存储数据即可,但有些数据比较复杂,不适合存放在一个变量里,例如描述一个学生,需要有学号,姓名,年龄,性别等等,于是创造一个自定义类型即结构体类型就十分必要了。以上的数个不同类型的变量都能一次性存放在一个结构体变量中,就如一下,实现结构体类型的声明。
2024-03-20 10:00:00 848 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人