- 博客(18)
- 收藏
- 关注
原创 【C++11】深度剖析智能指针
智能指针所有权引用计数性能开销典型场景注意事项unique_ptr独占无极低独占资源、替代 new/delete移动后原指针失效,不可再用shared_ptr共享强 + 弱中(控制块)多所有者共享资源避免循环引用,优先用 make_sharedweak_ptr无(仅观察)弱中(控制块)打破循环、安全观察需 lock () 后访问,需检查有效性。
2025-09-18 20:29:51
874
1
原创 【C++】异常处理机制
异常是程序运行时出现的 “意外情况”(如除数为零、资源不足等)异常处理机制的核心:让程序的 “检测错误模块” 与 “处理错误模块” 解耦,无需知道对方细节即可协作。
2025-07-30 12:41:03
985
3
原创 【C++11】lambda表达式与包装器
定义:lambda 表达式是一种匿名函数对象,可在函数内部定义,格式为。本质:编译时被转换为匿名仿函数类,其参数、返回值、函数体对应仿函数的operator(),捕捉列表对应类的成员变量。你可能想问,这个lambda函数有什么用呢,我老老实实写个函数不香吗,为什么还要搞这一套语法?其实,在 C++ 中,lambda 表达式的核心作用是在需要函数对象的地方,以简洁、内联的方式定义匿名函数,避免传统函数指针或仿函数的繁琐语法。它是 C++11 最重要的特性之一,广泛应用于现代 C++ 编程。
2025-07-13 11:25:47
968
原创 【C++11】列表初始化与可变参数模板
最主要的原因是解决不确定参数数量的问题。C++11支持可变参数模板,包括可变数量参数的函数模板和类模板。为了解决上述C++98初始化方式缺乏统一性,C++委员会在C++11中推出了通过{}来初始化的语法,对于所有类型(内置类型、对象、容器等)均可以使用{}初始化。是指将参数包(包含零个或多个参数的集合)分解为独立元素,并对每个元素应用特定模式的过程。在介绍C++11中的初始化方式前,我们先来回顾一下C++98中的初始化方式。编译器在编译时会根据参数包的长度,将可变参数模板实例化为多个具体版本的函数。
2025-07-09 16:25:07
715
原创 【C++11】右值引用和移动语义
在学习右值引用之前,我们得先弄清楚什么是左值,什么是右值。左值引用:type& x;右值引用:type&& y;!!
2025-02-22 18:22:24
957
2
原创 哈希表详解与实现
同样的,先找出key对应的桶,再从该桶开始向下寻找,这里有三种情况:一种是找的节点是桶头,一种是桶的中间,一种是没找到。首先先找key求余映射的点,只要找的位置不为空那就继续找(因为线性探测法中,一个数可能放在他求余的原位置,但也有可能因为该位置被人占了放在了后面的位置),如果找到的_kv.first和key相等并且找到的位置是存在有值的说明找到了,那么就返回当前节点的地址,若没有就++i向后找,如果走到空都找不到说明当前哈希表没有key,返回nullptr。有的兄弟,有的,这里引入二次探测法。
2025-02-07 12:55:08
1256
2
原创 Linux常见指令及其介绍一
Linux和Windows、Mac系统类似,都是一种操作系统,不过Linux是一款靠指令运行的开源操作系统。现如今Linux在服务器领域、桌面领域、移动嵌入式领域、云计算/大数据领域都有很大的发展。另外,Linux每一条指令的实质其实就是一个文件。本文将简述几条常用的Linux指令,帮助大快速入门Linux。
2024-10-24 16:37:16
612
3
原创 构造函数初始化列表
之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种方式,就是初始化列表,初始化列表的使⽤方式是以一个冒号开始,接着是⼀个以逗号分隔的数据成。对于构造函数来说,每个成员其实都会走初始化列表,只是说有初始化列表中显式写的成员,和没有在初始化列表中显式写的成员(隐式写)。(3)对于引用成员和const修饰的成员,没有默认构造自定义,因此必须在初始化列表中显式的初始化。员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。(1)对于声明的地方有缺省值的,用缺省值初始化。
2024-08-30 11:30:00
385
1
原创 日期类实现运算符重载
运算符重载是具有特定名字的函数,他的名字是由operator和后面要定义的运算符共同构成。和其他函数一样,他也具有返回类型和参数列表以及函数体。重载运算符函数的参数个数和该运算符作用的运算对象数量一样多。一元运算符有一个参数,二元运算符有两个参数,二元运算符的左侧运算对象传给第一个参数,右侧运算对象传给第二个参数如果一个重载运算符函数是成员函数,则他的第一个运算对象默认传给隐式的this指针。
2024-08-27 09:49:17
864
2
原创 简析构造与析构函数
编译器自带的构造函数对内置类型成员的初始化没有要求,也就是说是否初始化是不确定的。但对于自定义类型成员变量,要求调用这个成员变量的默认构造函数初始化这个成员,而没有默认构造函数,那么就会报错。无参构造函数、全缺省构造函数以及编译器自带的构造函数都叫构造函数,或者可以直接称为默认构造函数。无参构造函数和全缺省构造函数重载,会在调用时存在歧义。构造函数简介:构造函数是特殊的成员函数,构造函数用于对象实例化时初始化对象。对于无需对资源销毁的析构函数,可以像下面这样写,也可以不写,让编译器调用自带的析构函数。
2024-08-19 17:40:01
499
2
原创 C++命名空间
为了解决上面的问题,C++引入了namespace关键字。定义命名空间,需要用到namespace关键字,后面跟着该命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。样例1:正常的命名空间定义int main()//这里默认是访问全局的rand函数指针//这里指定Rand命名空间中的randreturn 0;输出结果:另外,命名空间还可以嵌套使用。
2024-08-14 18:10:04
843
3
原创 二叉树总结
递归思想在二叉树中具有重要的实践意义。所谓递归就是调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。简单点来说就是通过调用自己将大问题化简成小问题进行求解。存在限制条件,当满足这个限制条件的时候,递归便不再继续。每次递归调用之后越来越接近这个限制条件。另外,递归调用次数过多会导致栈溢出,这便是递归的一个缺点。
2024-08-13 12:47:36
1019
1
原创 【排序合集】明晰七大排序算法
冒泡排序作为一种容易理解,代码量少的排序深得编程小白们的喜爱。许多小白第一个接触到的排序就是冒泡排序。冒泡排序的原理:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。核心思想:跟隔壁的元素比较,比我大(小)就交换。以下动图是以排升序为例,大的放后面。
2024-07-19 09:54:53
1120
3
原创 【数据结构】堆(Heap)
kₙ₋₁ },把它的所有元素按完全二叉树的顺序存储方式存储,在一个一维数组中,并满足:Kᵢ <= K₂ *ᵢ₊₁ 且 Kᵢ <= K₂ *ᵢ₊₂ (Kᵢ >= K₂ *ᵢ₊ ₁ 且 Kᵢ >= K₂ *ᵢ₊₂ ) i = 0,1,2…这便是一次简单的插入,但由于新插入的元素可能使得原先的堆结构发生改变(新插入的元素使原堆不再为大堆或者小堆),因此这里采用一种向上调整的算法,使得堆的性质不发生改变。如果父节点大于孩子节点则交换,并更新父节点与子节点的值(将原子节点给给父节点,再更新子节点)。
2024-06-12 17:05:07
835
原创 栈和队列回顾
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。由于栈后进先出的特点,存储栈的数据结构用数组更为简单队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。
2024-05-28 14:42:26
868
原创 链表的回顾
结构:通常的,链表的每个节点中都被分为两个部分:当前节点要保存的数据和保存下一个节点的地址(指向下一个节点的指针)。概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的。链表根据不同的特点分类可以有带头、不带头,单向、双向,循环、不循环,一共8种(2 x 2 x 2)。其中,常见的链表有两种:一种是不带头单向不循环链表(单链表),一种是带头双向循环链表(双链表)。
2024-05-10 21:30:59
363
1
原创 C语言随机数
C语言中提供了一个关于随机数的函数rand。其原型为1.不过rand函数生成的随机数并不是真正的随机数,而是伪随机数。rand函数生成的随机数范围在0 ~ RAND_MAX之间,此值与库相关,但至少32767保证在任何标准库实现上都如此。即大部分编译器给出rand函数生成的随机数的范围在0 ~ 32767之间。2.另外,rand函数的实现还需要包含头文件<stdlib.h>
2024-04-16 16:15:37
483
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅