自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

记录我一步步的学习历程,期待无限进步,向星举目!

记录我一步步的学习历程,期待无限进步,向星举目!

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

原创 【C++】特别的程序错误处理方式——异常机制

本文介绍了C++异常处理机制的核心概念与应用。异常处理通过抛出对象实现问题检测与处理的分离,比C语言错误码更灵活。文章详细讲解了异常的抛出与捕获机制、栈展开过程、类型匹配规则、异常重新抛出及安全问题,并介绍了noexcept关键字的作用。异常处理虽强大但也需注意资源泄漏等安全隐患,后续智能指针可解决部分问题。

2025-09-09 23:58:56 935 5

原创 【C++】C++11的包装器:function与bind简介

本文介绍了C++11中的两个重要工具:std::function和std::bind。std::function是一个通用的函数包装器,可以统一存储各种可调用对象(函数指针、lambda表达式、仿函数等),并支持调用操作。文章通过代码示例展示了如何包装普通函数、lambda和成员函数,特别说明了成员函数包装时需要处理this指针的特殊情况。std::bind则是一个函数适配器,可以调整参数顺序和个数,文章演示了如何用占位符改变参数顺序,以及如何绑定固定参数值,最后展示了如何用bind简化成员函数包装时的th

2025-09-08 23:20:25 693 31

原创 【C++】简单介绍lambda表达式

这篇文章介绍了C++中的lambda表达式,主要内容包括:lambda表达式是匿名函数对象,可定义在函数内部,其类型由编译器生成且唯一;语法结构由捕捉列表、参数列表、返回类型和函数体组成;捕捉列表支持显式/隐式捕捉和混合捕捉,可捕获上下文变量;lambda默认const属性,可用mutable取消常性但不会影响实参;相比函数指针和仿函数,lambda使代码更简洁,常用于排序等场景。通过示例展示了lambda的使用方法和实际应用价值。

2025-09-07 23:43:22 1526 6

原创 【C++】C++11的可变参数模板、emplace接口、类的新功能

可变参数模板是C++11引入的一项重要特性,它允许模板接受任意数量和类型的参数。这一特性极大地增强了C++模板的灵活性和表达能力。可变数目的参数称为参数包,存在两种参数包:模板参数包、函数参数包。我们可以使用操作符去计算参数包中参数的个数。举个栗子:可变参数模板的原理跟模板类似,本质都是去实例化对应类型和个数的多个函数。C++11以后STL容器新增了emplace系列的接口,均为可变参数模板,在功能上兼容push和insert系列,但还有新特点。假设容器存储对象类型为T,emplace还支持直接插入

2025-09-06 16:41:28 980 35

原创 【C++】C++11的右值引用和移动语义

C++的发展历史上,有许多版本,比如C++98、C++11、C++14,不断更新新的语法。其中,继C++98后,C++11是一个相当重要的版本,更新了许多全新的语法,如右值引用、lambda表达式、function、bind等等,需要我们学习。今天我们首先来学习C++11的右值引用和移动语义。

2025-08-28 18:31:00 1325 35

原创 【C++】封装哈希表模拟实现unordered_set和unordered_map

我们之前学习过了STL中的map和set,它们的底层是红黑树实现的,增删查改的效率在O(n)。除此之外,STL中还有unordered_map、unordered_multimap和unordered_set、unordered_multiset容器,它们的使用方式和map系列和set系列几乎一模一样,所以我们就不用再详细介绍了,详见【C++】来学习使用set和map吧。它们的主要区别在于,unordered_xxx系列容器的底层是由哈希表实现的,上一篇文章我们也详细介绍了哈希表,详见。

2025-08-11 20:38:23 691 4

原创 【C++】哈希表原理与实现详解

如果您觉得我的文章还不错,欢迎多多互三分享交流,一起学习进步!

2025-08-07 16:54:23 2289 34

原创 【C++】论如何封装红黑树模拟实现set和map

本文基于红黑树实现STL中的set和map容器。首先分析STL源码,发现set和map通过红黑树实现,其中set存储key类型,map存储pair<key,value>类型。在红黑树实现中引入Key_Of_T仿函数解决不同类型数据比较问题:set直接返回key,map返回pair的first成员。文章详细展示了红黑树节点的定义、插入操作及旋转平衡处理。通过模板参数K、T和Key_Of_T实现泛型编程,使同一红黑树能同时支持set和map的存储需求,为后续实现迭代器和map的[]操作符重载奠定基础

2025-07-27 11:33:21 1985 36

原创 Java开发实测:用一句话生成一个完整程序(小白也能看懂)

“别怕编程,它比你想象的要简单得多。只要你愿意迈出第一步,飞算AI会陪你走完后面的路。”

2025-07-21 18:02:42 1034 2

原创 【C++】红黑树,详解其规则与插入操作

红黑树是一种自平衡二叉搜索树,通过颜色规则(红黑交替)和旋转操作保持平衡。其核心特性包括:根节点为黑色、红色节点的子节点必须为黑色、每条路径黑色节点数相同。插入新节点时,默认设为红色,若违反规则则通过变色和旋转(单旋/双旋)调整。相比AVL树,红黑树平衡条件更宽松,但同样保证O(logN)操作效率。文章详细介绍了红黑树的结构定义、插入逻辑及四种调整场景的实现方法,并附有代码示例和示意图解析。

2025-07-18 21:49:48 1408 20

原创 【C++】神奇的AVL树

如果您觉得我的文章有所帮助,欢迎多多互三分享交流,一起学习进步!

2025-07-15 23:26:01 1217 20

原创 【C++】来学习使用set和map吧

本文主要介绍了C++的map和set

2025-06-11 15:56:10 1333 20

原创 【C++】二叉搜索树

上面我们实现的二叉搜索树,结点中只存储了一个key,称为关键码,关键码即为需要搜索的值,使用这种二叉搜索树的场景只需要判断key是否存在。使用这种key/value二叉搜索树的场景,比如英语词典,树的结构中存储key(英文)和value(中文),搜索时输入英文作为key进行查找,找到后输出对应的value中文。使用这种key二叉搜索树的场景,比如小区车库,只有业主的车能进入,车牌号作为key值,就在系统中检查key是否存在以确定是否为业主的车。从名字就能看出来,二叉搜索树主要用于搜索。

2025-06-05 11:09:00 1094 12

原创 【C++】“多态”特性

(运行时)多态是一个继承体系下的类对象,去调用同一函数,而产生不同的行为。比如,Person类为基类,Student类继承了Person类,Soldier类继承了Person类,那么这三类的对象买票行为就有不同的效果。必须是基类的指针类型或引用类型去调用虚函数。被调用的函数必须是虚函数,并且完成了虚函数的重写(覆盖)。我们依次来说明:要实现多态效果,首先必须是基类的指针或引用去调用,因为只有这样才既能指向基类对象又能指向派生类对象(的基类的切片)。

2025-05-29 17:40:21 871 10

原创 【Linux系统】Linux基础指令(一)

本文介绍了几种Linux系统中的常用指令

2025-05-26 20:10:36 889 5

原创 【C++】从零认识C++的“继承”

本文简要介绍了C++的继承机制

2025-05-21 22:28:13 750 13

原创 【Linux系统】开始认识学习Linux:环境搭建

在开源社区和企业的共同推动下,Linux 迅速迭代并衍生出众多发行版(如 Debian、Red Hat、Ubuntu、CentOS),逐渐在服务器、云计算、嵌入式设备和移动终端(Android)等领域占据主导地位。其开源、模块化和高可定制的特性,不仅打破了商业操作系统的垄断,还成为全球协作开发的典范。但凡使用电子设备,就离不开操作系统,比如Windows、MacOS、鸿蒙。然后,修改密码,重置自己的root密码,记住自己的密码。新建会话,主机处填入刚才的公网ip。大功告成,自此,开始我们的Linux之旅。

2025-05-19 17:31:02 344 1

原创 【落羽的落羽 C++】进一步认识模板

因为在预处理阶段,cpp文件的头文件都会展开,相当于调用所在cpp文件里面就有了声明和定义了。就不会发生链接错误。

2025-05-15 22:15:30 846 4

原创 【落羽的落羽 C++】stack和queue、deque、priority_queue、仿函数

我们之前学习的vector和list,以及下面要认识的deque,都属于STL的容器(containers)组件。而stack和queue,属于STL的配置器(或称为配接器)(adapters)组件,或者归类为容器配置器(container adapters),它们可以修饰容器的接口而呈现出全新的容器性质,即stack的“先进后出”和queue的“先进先出”特点。

2025-05-12 23:18:24 1059 11

原创 【落羽的落羽 C++】list及其模拟实现

本文主要介绍了list使用及其模拟实现

2025-05-06 21:38:46 1423 8

原创 【落羽的落羽 C++】vector

本文主要介绍了vector

2025-04-26 19:09:16 719 4

原创 【落羽的落羽 C++】string

本文主要介绍了string类

2025-04-18 09:33:30 823 6

原创 【落羽的落羽 C++】模板简介

本文简单介绍了C++的模板

2025-04-02 17:41:23 1131

原创 【落羽的落羽 C++】内存区域、C++的内存管理

实际上,new的使用是调用了一个全局函数operator new,这个函数的内部其实还是用malloc实现申请空间的,但当malloc申请失败为NULL时,函数不会报错,而是抛异常。new T[n]的原理是,调用operator new[]函数,在这个函数中调用operator new函数完成对n个对象空间的申请,并在申请的空间上执行n次构造函数。new自定义类型的原理是,调用operator new函数申请空间,并在申请的空间上执行构造函数,完成对象的初始化。一言以蔽之,内置类型的申请很好理解。

2025-03-29 15:41:00 854 2

原创 【落羽的落羽 C++】日期类(Date)的完整实现

【代码】【落羽的落羽 C++】日期类(Date)的完整实现。

2025-03-20 14:16:53 213

原创 【落羽的落羽 C++】一篇文章看懂C++的“类和对象”

本文详细讲解了C++类和对象

2025-03-16 22:05:56 6070 3

原创 【落羽的落羽 C++】C++入门基础:引用,内联,nullptr

用inline修饰的函数叫做内联函数,编译时C++编译器会在调用函数的地方展开内联函数,这样调用函数时就需要建立栈帧了,可以提高效率。当然,C语言中的宏函数也会在预处理时替换展开,但是宏函数在实现中很复杂容易出错,且不容易调试。,我们本想调用参数是int*的Fun函数,但由于NULL被定义成0,会调用成参数是int的Fun函数;比如,“萨姆”是流萤的别名,“萨姆”就是对流萤的引用,当我们称呼萨姆时,指的仍然是流萤这个人。它继承了宏函数的优点,但没有宏函数的缺点。这两个函数构成了函数重载,编译时没有问题。

2025-03-06 16:54:48 850 1

原创 【落羽的落羽 C++】C++入门基础:输入与输出,缺省参数,函数重载

这一部分知识涉及到后面C++的类和对象的概念,这里我们只能简单理解:直接来看一般使用实例:现在能看懂理解就好,之后我们会深入学习C++的类和对象。缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果我们没有给函数传实参,则函数的形参直接采用这个缺省值,有实参则优先采用实参值。缺省参数分为全缺省和半缺省(有些地方也把缺省参数叫做默认参数)。但是,当函数的声明和定义不再一个文件中时,缺省参数值就不能在声明和定义中同时出现了,规定必须在函数声明中给定缺省值。比如:缺省参数分为全缺省和半

2025-03-04 23:22:51 679

原创 【落羽的落羽 C++】C++入门基础:C++简介,命名空间

C++起源于1979年的贝尔实验室,Bjarne Stroustrup(本贾尼博士)在那里从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,他感受到了现有编程语言(如C语言)在表达能力、可维护性、可扩展性方面的不足。他在1983年在C语言的基础上添加了面对对象编程的特性。设计出了C++的雏形,此时的C++已经有了类、封装、继承等核心概念。随后的几年中,C++在学术界和工业界的应用逐渐增多,一些大学和研究所开始将C++作为教学和科研的首选语言,一些公司开始在产品开发中尝试使用C++。

2025-02-28 23:39:47 1042 1

原创 【落羽的落羽 数据结构篇】链式结构的二叉树

才能编译通过:

2025-02-26 15:58:01 957

原创 【落羽的落羽 数据结构篇】顺序结构的二叉树——堆

相比刚才所有结点位置大乱套,这样只要调整一个结点的位置就好了。向下调整算法和向上调整类似:它是比较结点和其较大或较小孩子的值,不断往下交换调整位置直至满足大堆或小堆:向下调整算法有三个参数:要被调整的堆数组、要调整的结点的下标、堆的数据个数。

2025-02-23 21:20:13 901

原创 【落羽的落羽 数据结构篇】树、二叉树

从一个结点到另一个结点的结序列,结点之间只能通过父子关系连接、如上图,A到L的路径为A-C-H-L,G到O的路径为G-C-A-E-J-O。:以一个结点为根结点的子树中的所有结点都称为该结点的子孙。如上图,除A外所有结点都是A的子孙,I、J、O都是E的子孙。:若一个结点含有子树,则子树的根结点称为该结点的子结点。如上图,B、C、D、E是A的子结点,K是F的子结点。如上图,A是B、C、D、E的父结点,C是H的父结点。:从根结点开始定义,根结点在第1层,根结点的子结点在第2层,以此类推。:树中结点的最大层次。

2025-02-22 00:26:16 896 2

原创 【落羽的落羽 数据结构篇】栈和队列

int top;//指向栈顶的位置//栈容量}ST;typedef struct QueueNode //队列节点结构}QueueNode;typedef struct Queue //队列结构//队头//队尾//有时也需要来一个int size;记录有效元素个数}Queue;

2025-02-19 22:21:06 953 6

原创 【落羽的落羽 数据结构篇】双向链表

所以,理论上我们能把链表分为2×2×2=8种:带头单向不循环链表、不带头双向不循环链表、带头双向循环链表……上次我们学习的“单链表”,全称应该就是“不带头单向不循环链表”而我们这次要学习的“双向链表”,全称是“。链表的分类实际上要从这三个方向分析:是否带头、单向还是双向、是否循环。值得注意的是,单链表为空时,链表一个节点都没有。这里的“尾部”,是头结点的prev指针指向的位置。循环就很好理解了,节点的指针成员循环指向。“头部”是头结点的next指向的位置。这是双向链表的每一个节点的结构。

2025-02-13 16:18:25 671

原创 【落羽的落羽 数据结构篇】单链表

链表是一种物理存储结构上非连续、非顺序的存储结构,链表由一个个节点(node)组成,数据结构的逻辑顺序是通过链表中的指针链接次序实现的。链表的节点通常是一个结构体变量,每一个节点都是独立的空间,它们在内存中的地址不一定是连续的。而把他们串联在一起的便是结构体中的指针。第一个节点的指针成员指向第二个节点,第二个节点的指针成员指向第三个节点……最后一个节点的指针成员是空指针:也就是说,链表是一种逻辑上线性,物理(地址)上非线性的数据结构。链表也包括很多种,如单链表、双向链表等等,今天我们学习单链表。顾名思义

2025-02-06 10:38:49 772

原创 【落羽的落羽 数据结构篇】顺序表

/数组首元素地址int size;//有效数据个数//空间大小}SL;

2025-01-28 20:11:13 990

原创 【落羽的落羽 数据结构篇】算法复杂度

数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以我们要学习各种各样的数据结构,比如线性表、树、图、哈希等等。算法,是定义良好的计算过程。简单来说,算法就是一系列的计算步骤,用来将输入数据转换成输出结果。衡量一个算法的好坏,需要从算法的复杂度来分析。

2025-01-24 22:26:55 997

原创 【落羽的落羽 C语言篇】项目的编译和链接、预处理

宏常常被应用于执行简单的运算,不用函数的原因是宏的运算速度和程序规模更胜一筹,而且宏的参数可以不考虑类型,但函数必须指明参数类型。链接是一个复杂的过程,它要把一堆文件链接在一起生成可执行程序,这个过程主要包括地址和空间分配、符号决议、重定义等。不过用” "包含库函数头文件,查找的效率就低一点,而且也不好区分库文件和本地文件了。C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的,,利用这一点,它能做到函数做不到的事情,比如。,后面的使用中我们需要重新定义MAX,就要先。

2025-01-22 16:34:10 856

原创 【落羽的落羽 C语言篇】文件操作

简单来说,程序需要跟各种外部设备交互,外部设备包括键盘、显示器、磁盘、U盘、网络等等,程序的数据需要输出到各种外部设备上,也需要从各种外部设备获取数据,不同的外部设备的输入输出操作各不相同。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息,比如文件的名字、状态、位置等等。可以使pf指向某个文件的文件信息区,通过该文件信息区的信息来操作该文件,换句话说,通过文还指针能够间接找到与它相关联的文件。一般情况下,我们想要往流里写数据,或者从流里读取数据,都是先打开流,然后再操作。

2025-01-16 00:02:47 911

原创 【落羽的落羽 C语言篇】动态内存管理·下

但str的值没有被改变,它还是指向着那一块空间,但那块空间已经不属于它了,str已经是一个野指针了。传参str时,p是形式参数,是str的一份拷贝,在这个函数里面对p的申请空间不会影响str的空间。虽然返回指针p,但p指向的空间会在退出函数的时候就被释放,返回的p变成了野指针,str也变成了野指针。唯一的问题是:使用malloc后没有free掉开辟的空间,会造成内存泄漏,在test函数的最后加一句。上期讲过,free释放不是动态开辟的内存,结果是未知的,换句话说,是错误的。重复free,无意义。

2024-12-26 17:54:52 1130

空空如也

空空如也

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

TA关注的人

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