自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

游人

慢慢学吧,不停歇

  • 博客(78)
  • 收藏
  • 关注

原创 初识C++ · 基于红黑树封装map + set

这部分是挺有难度的,因为套了好几层关系,涉及到关系层大概有4层左右,但是呢,多花点时间即可,更重要的还是细心部分,其次就是逐个的去捋清楚每层的关系即可,细心 + 耐心,这里就通关了。

2024-07-31 18:10:10 1124

原创 初识Linux · yum和vim

我们学习Linux的时候,是有编程语言的基础的,那么呢,我们学习Linux的时候最迫切的就是希望能打印出来一点东西,所以在最开始的几章的时候,我们学会了使用nano,来打印Hello world:但是使用nano实在是没有vim好,比如我们要快速的定位,快速的删除等,所以本文会着重介绍vim,对于yum,我们一开始就用上了,第一次接触man的时候,我们就是yum install man,安装我们的Linux青春修炼手册,所以我们大致对yum也有了一定的了解,本文的第一个重点就是介绍yum。

2024-08-22 19:18:13 755

原创 初识Linux · 权限

继上文我们将常用的指令介绍的七七八八了,本文着重探索Linux文件中的权限部分,上文介绍的许多指令都是和文件挂钩的,并且有一句话说得好,Linux中一切皆文件,所以我们本文,先介绍完文件权限的预备知识,再着重介绍一下文件的权限等问题。

2024-08-22 01:30:00 584

原创 初识Linux · 基本指令(完)

本文是Linux基本指令的最后一节了,涉及的指令较多~有了前文的铺垫,我们知道指令的最基本的知识点是指令就是可执行程序,知道这个就够了,其次,我们在这里引入一个思想,Linux中一切皆文件,即便是显示器,也是文件,至于为什么,看下文咯。

2024-08-20 06:39:24 1243

原创 初识Linux · 基本指令(2)

上文是Linux的部分基础指令,主要是开胃菜,先熟悉一下,但是本文还是指令的学习。但是在学习指令之前,我觉得我们应该对指令一个正确的认识,所以在前言部分我们先使用windows进行些许介绍,看:当我们打开谷歌浏览器的快捷方式,以及打开该exe文件的时候,打开的都是同一个谷歌浏览器,难道没有人怀疑为什么快捷方式可以直接打开浏览器吗?这是因为快捷方式的本质就是指向的该exe文件。同理,指令本质上就是一个一个的可执行程序。

2024-08-19 01:11:44 792

原创 初识Linux · 基本指令(1)

今天是Linux系列的第一章节,对于Linux的主线学习大概会更新两个半月左右,中间穿插着算法等的学习,那么这里对于Linux的历史背景就不赘述了,有兴趣的同学可以上网自行搜索。我们首先抛出几个问题,为什么我们要学习Linux?Linux究竟是什么?Linux相对于闭源的操作系统来说有什么优点?Linux的应用场景是哪里?第一,为什么学习Linux?在当今的科技时代中,Linux在其中扮演着举足轻重的角色,不仅是为了加强IT职业的素养,对于从事这门工作的人来说Linux是必须要掌握的技术。

2024-08-19 00:00:00 1816

原创 初识C++ · IO流

IO流,启动!因笔者对于IO流的理解不是很深刻,所以这里进行简单的介绍即可。

2024-08-15 17:45:26 1009

原创 初识C++ · 类型转换

C++可以说是恨死了隐式类型转换,你可能会疑问了,为什么?不是单参数隐式类型转换为自定义类型的时候人们还是津津乐道的吗?return 0;这段代码就是个死循环,因为a最后变成了-1,然后就隐式类型转为为size_t类型,最后一直重复,直到系统崩溃。C++委员会呢,可能是深受其害,所以打算在类型转换上动点东西。return 0;

2024-08-15 00:19:02 932

原创 初识C++ · 特殊类设计

类的种类繁多,面对不同的场景衍生出了不同的类,每个类各有特点,比如有的类不能被拷贝,有的类不能在堆上创建,有的类不能只能在堆上创建。那么今天,我们就来介绍一些特殊的类。

2024-08-13 22:13:10 915

原创 初识C++ · 智能指针

智能指针的引入,我们得先从异常开始说起,异常面临的一个窘境是new了多个对象,抛异常了会导致先new的对象没有析构,从而导致内存泄漏的问题,解决方法是使用RAII。RAII是一种技术,英文的全称是:Resource Acquisition Is Initialization,是利用对象的声明周期来解决内存泄漏的一种技术。throw string("除数为0");

2024-08-13 17:24:37 1021

原创 初识C++ · 抛异常

在C语言里面,报错的方式往往是返回错误码,比如error1什么的,那么这个时候就需要程序员对照错误码的数字查找对应的错误,还有一种方式是直接终止程序,就像assert一样,所以有时候assert也成为暴力检查,那么可能有同学会觉得,这报错也没啥问题呀,但是,这里举个样例:前几天是七夕节,你给你的女神发消息,结果发现人给你删了,欸,发消息这个动作,就失败了,系统应该报错,但是微信的操作不是直接终止掉你的整个微信吧?

2024-08-12 22:01:22 781

原创 初识C++ · C++11(3)

本文介绍的是包装器以及线程库的简单了解,但是呢,线程是基于对Linux有一定的了解,所以本文就是简单介绍一下,介绍完包装器以及线程库的简单理解之后C++11的特性就到此为止,当然C++11远不止于此!

2024-08-12 00:00:20 960

原创 初识C++ · C++11(2)

继上文介绍了右值概念,本文介绍两个C++11中的重要概念,lambda表达式和模板的可变参数,这两个部分都不算难,重在理解,有了lambda表达式和模板的可变参数的基础才好理解包装器。

2024-08-10 23:46:35 1096

原创 初识C++ · C++11(1)

在C++11之前,C++98的出现使得C++看起来更像是一门独立的语言,C++委员会成立后,对外宣称的是5年一个版本,但是呢,计划赶不上变化,03年发布了C++03,计划07年发布07版本,变数多了,就一直拖啊拖,拖到了C++11,也就是2011年才发布,搁了这么久,C++11也是憋了一个大的,但是挨骂也挨多了,于是呢,后面就想着,有点新东西了就发布新版本,比如之后的C++14 C++17,C++20等,目前来说,C++98 C++11 C++20都是大版本,其中20还没有那么大,毕竟是3年更新一次,C++

2024-08-10 02:30:00 1179

原创 初识C++ · 哈希表封装unordered_map/set

但是节点指针只能实现在某个桶里面++,这里顺带提一下,对于unordered_map unordered_set来说,迭代器是单向迭代器,所以我们不用实现--,那么有了节点指针,我们就可以实现某个桶的遍历,const顺序表指针是因为,当我有一个const哈希表的时候,this指针指向的是const对象,这时候我用非const对象指针来接受,就存在了权限放大的问题,所以不行,即调用的情况有两种,一是const调用,二是非const调用,因为权限问题所以我们就加上了const。

2024-08-05 20:02:32 1048

原创 初识C++ · 哈希表

哈希,部分说法叫散列,在编程里面哈希是一种思想,即一种映射,像数学函数一样,每个不同的值对应每个不同的值,数学里面使用函数来实现哈希,即值映射,但是在C++里面,我们可以使用不同的对象来映射不同的值,今天介绍的是用整型 自定义类型(string)来介绍哈希。

2024-08-05 12:44:35 844

原创 初识C++ · 红黑树

红黑树,二叉搜索树的一种,基于红黑树实现的结构有map 和 set,红黑树是一种近似平衡的结构,也就是没有把高度卡的特别死。这个结构基于原来搜索二叉树优化的点是在于使用颜色,来判断简单路径的长度,从而达到平衡的目的。1:节点不是黑色就是红色,2:根节点是黑色的,3:不存在连续的两个红色节点,4:每条简单路径上的黑色节点数目应该相同只要满足了以上的4个条件,那么就可以达到最短路径的二倍不超过最长路径。

2024-07-29 20:36:44 610

原创 初识C++ · AVL树(2)

AVL树作为一种结构,理解树的本身是不大难的,难的在于,树旋转之后的连接问题,写AVL树的代码大部分都是在旋转部分,所以连接问题是比较需要细心的,那么这里来说呢,把细心做好,变量的位置放好,连接的次序连接对,就成功了。

2024-07-26 21:19:33 768

原创 初识C++ · AVL树(1)

上文,上上文提到了map set,二叉搜索树,其实都是为了近两文做铺垫的,虽然map的底层是红黑树,但是也为AVL树的学习打下了基础,那么什么是AVL树呢?由谁发明的呢?两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis发明的,名字就是发明家的首字母咯,发明是用来干什么的呢?发明出来是为了解决当树的结构趋近于单链表时候,效率接近O(N)的问题,只要能有效降低高度,那么就能提高速度,所以AVL树,诞生了。

2024-07-26 03:31:24 608

原创 初识C++ · map和set的使用

在前面阶段,我们已经学习了stl里面的部分容器,比如vector,list,deque等,这些容器都被称为序列式容器,也就是每个值之间式没有关联的,那么今天介绍的容器,map和set,是关联式容器,即每个值之间是有关联的,关联式容器在数据存储方面和序列式容器没有什么大差别,但是在数据检索上就很有用了,其中map的key - value模型存的键值对在数据检索方面的效率是很高的。

2024-07-24 17:56:12 868

原创 数据结构初阶 · 二叉搜索树

在最初学习二叉树的时候,就提及到过单独用树来存储数据是既不如链表也不如顺序表的,二叉树的用处可以用来排序,比如堆排序,也可以用来搜索数据,这是二叉树的用处,用来排序可以实现堆,用来搜索数据可以实现二叉搜索树,即今天实现的一种结构。那么什么是二叉搜索树呢?即左孩子比根小,右孩子比根大,且所有的子树都满足这个特点,这就是二叉搜索树,那么是如何实现搜索数据的呢?搜索数据就是判断大小,最多走高度次个语句就可以找到数据了。那么找数据的时间复杂度是不是O(logn)呢?

2024-07-22 14:27:51 964

原创 初识C++ · 多态(2)

多态(1)好像也不是很难?不不不,这里的菱形(虚拟)继承的多态是有点难度的,所以,打起精神来!!!

2024-07-20 17:06:12 952

原创 初识C++ · 多态(1)

封装,继承,多态是面向对象的三大特点,今天就来介绍多态的一部分内容。多态,顾名思义,一种行为的多种形态,就买票这个行为而言,成年人买票一般是全价,学生买票一般都是半价,这就是一种多态,一种行为可以产生不同的结果。那么现在就进入到多态的基本学习。public:cout

2024-07-19 21:03:44 1027

原创 初识C++ · 继承(2)

继上文将介绍了继承的概念和定义,以及基类子类的互相赋值,作用域,和默认成员函数的使用,本文介绍最后一点内容:友元,静态成员,以及菱形继承和菱形虚拟继承。也就是成员变量是其他自定义类型的。这方面可以概括为,必要继承就继承,必要组合就组合,组合和继承都可以就组合。这是因为组合的低耦合高内聚,继承的高耦合低内聚。

2024-07-18 18:00:15 1135 2

原创 数据结构初阶·排序算法(内排序)

目前常见的排序算法有9种,冒泡排序,选择排序,插入排序,希尔排序,快速排序,归并排序,计数排序,基数排序,桶排序。实际生活中排序的应用也是有限的,今天我们介绍其中7个,基数排序和桶排序不介绍。介绍常用的即可。顺带一嘴,本文里面所有的排序都是内排序,也就是在内存里面进行排序的,还有一种排序叫做外排序,即是在磁盘里面进行排序的,这种排序具有记忆性,外排序用到的就是归并排序,因为归并排序有一个特点就是空间复杂度为O(N)。好了正文开始。

2024-07-18 02:48:26 974

原创 初识C++ · 继承(1)

对于面向对象这门语言的三大特性 -> 封装 继承 多态,我们已经学习了封装,这里简单理解一下封装,在面向过程的时候,数据和方法(函数)的分离开来的,所以C语言干什么事情都是要自己造轮子,比较麻烦,对于C++ 来说,有了类和对象这个概念,就可以把数据和方法放在一起,那么访问数据就更容易,不需要自己造轮子,这是一种封装,比如不同的数据结构,顺序表链表等,C++有专门的头文件,这也是一种封装,对于反向迭代器来说,是对迭代器的一种封装。那么今天,就进入到继承这一特点来。

2024-06-20 17:31:13 1052 7

原创 数据结构初阶 · 链式二叉树的部分问题

链式二叉树我们在C语言阶段已经实现了,这里介绍的是涉及到的部分问题,比如求树的高度,求树的节点个数等,连接部分就手动连接,用一个样例来介绍涉及到的几个问题。这里对前面知识反馈比较大的是递归,可以说每个问题都用到了递归。

2024-06-10 17:28:05 1107

原创 初识C++ · 模板进阶

前面模板我们会了简单的使用,这里带来模板的进阶,当然,也就那么几个知识点,并不太难。

2024-06-07 22:40:07 1203

原创 初识C++ · 反向迭代器简介

继模拟实现了list和vector之后,我们对迭代器的印象也是加深了许多,但是我们实现的都是正向迭代器,还没有实现反向迭代器,那么为什么迟迟不实现呢?因为难吗?实际上还好。我们实现const迭代器的时候,有两种路,一是直接来一个类,二是通过模板,非const迭代器的复用来实现的,同理,我们实现反向迭代器的话,也可以每种结构都来一个单独的反向迭代器的类,但是科学家们觉得太麻烦了,所以把反向迭代器的高度拉的很高,高到什么程度呢?

2024-06-05 21:39:41 556

原创 初识C++ · 优先级队列

栈和队列相对其他容器来说是比较简单的,在stl里面,有一种容器适配器是优先级队列(priority_queue),它也是个队列,但是不大像队列,本文中简略介绍如何使用和模拟实现它。

2024-06-05 15:36:39 755

原创 初识C++ · 模拟实现stack和Queue

经历了list三个自定义类型的洗礼,来个简单的放松放松,即栈和队列:文档记录的,栈和队列是一种容器适配器,它们不属于stl,但是它们的大体结构我们都是了解的,在数据结构初阶我们已经用了C语言进行实现,这里用C++进行实现。

2024-06-03 22:10:30 628

原创 初识C++ · 模拟实现list

有了string,vector的基础,我们模拟实现list还是比较容易的,这里同样,先看源码进行简单的分析,这里直接说了就,list的模拟实现难就难在于,需要三个自定义类型,所以我们的重难点就是如何捋清它们三个之间的关系:一共三个自定义类型,分别是用来控制节点的,控制迭代器的,控制链表的,那么为什么会这么复杂呢?尤其是在迭代器部分的模板有三个参数。

2024-06-01 22:10:58 1190

原创 初识C++ · 模拟实现vector

目录前言:1 部分简单函数的实现2 push_back和pop_back3 reserve和resize4 Print_vector5 insert和erase6 拷贝构造7 构造8 赋值9 memcpy的问题10 迭代器失效继上文模拟实现了string之后,接着就模拟实现vector,因为有了使用string的基础之后,vector的使用就易如反掌了,所以这里直接就模拟实现了,那么实现之前,我们先看一下源代码和文档:源码不多看,因为很容易绕晕进去,我们从这两个部分得到的信息就够了,首先,vector是一个

2024-05-27 22:12:30 864

原创 初识C++ · 模拟实现string

继上文介绍了string的函数实现之后,本文介绍模拟实现string的大部分函数。

2024-05-20 21:53:25 977

原创 初识C++ · string的使用(2)

这个函数是缩容,但是是在C++11中引进的,虽然可以实现我们想要的功能,但是实际上内存越来越发达的时代,我们更多的追求的是效率,空间不够的情况是比较少见的,而且这个函数使用代价挺大的,我们大多数人以为的缩容是这样的:有一块空间,释放到不需要的部分,但是在动态内存管理章节我们知道,释放空间不能一段一段的释放,只能一整块的释放,所以实际的缩容是把原来的空间释放掉,重新开一块我们想要的小空间,这个代价挺大的,所以不推荐使用。

2024-05-14 16:12:12 682

原创 初识C++ · string的使用(1)

STL是一个标准库,是C++标准库的一个重要部分,那么什么是STL?STL是一个模板库,包含了算法框架和数据结构。STL有不同的版本,比如原始版本,P.J 版本,R.W 版本,SGI版本,不同版本有不同的特点,比如SGI版本的可移植性好,比如P.J版本的可读性较差。STL这个库里面有六大部分,分别是算法,容器,迭代器,仿函数,空间配置器,配接器。我们即将介绍的,是容器部分的string,可以形象的把容器理解为数据结构,里面还有链表list,树set,顺序表vector等。

2024-05-13 18:40:40 1061

原创 初识C++ · 模板初阶

这里就需要用到模板了,模板使用到了两个关键字,一个是template ,一个是typename,template是模板的英文名,typename是类型名的英文,还是很好理解的。既然是多参数,那么我们使用不同的模板就行,但是返回值的话,就用auto即可,这里可以说auto很妙,不会存在丢失精度的问题,也不用显式实例化,也不用强转什么的。有了模板之后,我们实现相同的就很容易了,这里如果里面的函数定义和声明分离的话,如果不是同一个.h文件的话,造成的效果是很难想象的,会造成编译的时间大幅度的增加。

2024-05-08 22:03:12 883

原创 初识C++ · 内存管理

因为抛异常是后面的知识了,这里简单介绍,在C语言中报错是通过返回错误码,比较暴力,在C++中有一种温和的报错方式就是抛异常,通过try - catch ,比如我一次性开辟很大的空间,系统分配的内存不够了,那么try-catch就会起作用,程序运行完毕会打印一行字,告诉你有错误,new里面的抛异常就是为了防止开辟空间不够,因为链表每次开辟一个节点就要检查是否为空,new底层中的malloc开辟之后,抛异常直接就帮忙解决了空指针的问题(因为malloc函数开辟失败返回的是空指针)。*pChar3在哪里?

2024-05-08 14:11:35 1055

原创 初识C++ · 类和对象(下)

对于类中有自定义类型的,我们原本的想法是给MyQueue一个值,然后初始化,并且stack调用自己的默认构造,如果没有初始化列表,Stack就完不成自己的初始化,那么MyQueue也就完不成自己的默认构造。我们先声明的_a2,所以_a2先给值,是_a1给的,_a1还没开始初始化,所以给的是随机值,然后初始化_a1,这时候_a1初始化为了1,所以打印出来有一个是1,有一个是随机值。如果是有名对象,那么析构函数的调用会在主函数结束的时候调用,那么666的打印就会在~A之前打印,但是这是匿名对象,创建即是销毁。

2024-05-03 14:08:16 878

原创 初识C++·类和对象(中)(3)

前言,最难的已经结束了,来点轻松了放松一下。

2024-04-21 21:08:54 925

空空如也

空空如也

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

TA关注的人

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