- 博客(29)
- 收藏
- 关注
原创 std::shared_ptr 复习
是 C++11 引入的智能指针,它共享对所管理对象的所有权,即多个shared_ptr可以指向同一个对象。当最后一个shared_ptr离开作用域或被重置时,它会自动释放所管理的对象。shared_ptr当两个或多个shared_ptr相互引用,形成一个环时,就会发生循环引用。此时,引用计数永远不会减少到 0,导致内存泄漏。// 自定义删除器delete p;// 使用自定义删除器return 0;// 离开作用域时,调用自定义删除器。
2026-04-08 17:14:45
382
原创 std::unique_ptr 复习
是 C++11 引入的智能指针,它独占对所管理对象的所有权,即同一时间只能有一个unique_ptr指向同一个对象。当unique_ptr离开作用域或被重置时,它会自动释放所管理的对象。unique_ptr// 自定义删除器delete p;// 使用自定义删除器return 0;// 自动调用自定义删除器是 C++11 引入的一种轻量级智能指针,它通过独占所有权和移动语义,提供了一种安全、高效的内存管理方式。零开销:与裸指针相比几乎没有额外的内存开销独占所有权:避免了资源的重复释放。
2026-04-08 17:11:46
361
原创 树莓派安装Ubuntu Server 极简版 SSH踩坑记录(从失败到成功)
1.在烧录好的U盘根目录内,创建ssh空文件,不要后缀名。若烧录完找不到U盘,重新插入后win+x,选择磁盘管理。这里会有一个U盘没有分配,右键选择分配就出来了。2.配置user-data和,没有则直接创建,都没有后缀。#userdata修改 cloud-configusers:- defaultplain_text_passwd: '你的密码' # 替换成自己的登录密码lock_passwd: false # 解锁密码,避免被系统锁定。
2026-03-20 02:38:50
306
原创 红黑树学习时的疑惑记录
如果叔红:说明祖父以下还能通过局部变色调整而不需要旋转。如果叔黑:说明必须旋转才能重新分配黑色结点,保持黑高不变。通过观察叔节点的颜色,可以确定采用哪种调整策略,以最小化对红黑树平衡性质的破坏,确保树的高度平衡。
2026-03-18 20:11:19
178
原创 AVL树的实现和部分注意点
问题节点:在AVL树中,指导致树失衡的关键中间节点,通常是在异侧失衡(左右或右左)情况下,连接失衡路径的中间节点。双旋转的本质:“先修正子树失衡,再修正父节点失衡”,平衡因子的更新依赖于核心失衡节点(subLR/subRL)旋转前的 bf;平衡因子更新规则核心失衡节点的 bf 为 1/-1 时,仅需更新父节点和子节点的 bf,自身 bf 归 0;核心失衡节点的 bf 为 0 时,所有相关节点 bf 均归 0;对称性:LR 旋转和 RL 旋转是对称操作,平衡因子更新逻辑也完全对称,可对比记忆。
2026-03-17 21:26:35
403
原创 # C++ STL set与map operator[]
维度容器成员find算法库find来源容器类的成员方法STL 算法库()中的通用函数实现原理利用容器内部结构优化(如红黑树、哈希表)线性遍历迭代器范围时间复杂度通常为 O(log n) 或 O(1)(取决于容器)始终为 O(n)适用范围仅适用于特定容器适用于任何提供迭代器的容器set与map:有序集合,基于红黑树实现,元素唯一,查找时间复杂度 O(log n)。:允许数据冗余,multimap没有operator[]操作。
2026-03-16 21:08:27
332
原创 二叉树最近公共祖先问题
二叉搜索树:利用其有序性,通过比较节点值快速定位。三叉链:利用父指针,通过路径长度差找到交点。普通二叉树:通过递归遍历,判断节点位置关系。掌握这些方法不仅有助于解决具体问题,也能加深对树结构和递归算法的理解。相关链接LeetCode 236. 二叉树的最近公共祖先LeetCode 235. 二叉搜索树的最近公共祖先二叉树的最近公共祖先问题详解。
2026-03-15 20:22:58
367
原创 C++ 二叉树、堆与搜索二叉树机制-个人复习记录
本文介绍了二叉树的基本概念与性质,包括完全二叉树和满二叉树的定义及节点关系。重点分析了堆的结构特性(大堆/小堆)及其增删操作原理。详细讲解了搜索二叉树(BST)的实现,涵盖节点插入、查找和删除三大核心操作,并特别强调删除操作中父节点更新、根节点处理和内存管理等关键细节。通过代码示例和图示,展示了BST的构建过程及删除节点时的子树替换策略,为理解和实现二叉搜索树提供了完整的技术指导。
2026-03-14 16:43:43
666
原创 C++ 继承与多态:从菱形继承到虚表机制-个人笔记记录
多态是指不同对象对同一消息做出不同响应的能力,C++ 中通过虚函数和动态绑定实现。重载:同一作用域内,函数名相同但参数列表不同(编译期多态)。重写:派生类重新实现基类的虚函数,函数签名完全相同(运行时多态)。重定义:派生类定义与基类同名的非虚函数,隐藏基类函数。C++ 的继承与多态是面向对象编程的核心特性,通过虚函数、虚表、虚继承等机制,实现了代码的复用和灵活的运行时行为。理解这些底层机制,有助于编写更高效、更可靠的 C++ 代码。菱形继承与虚继承:菱形继承的问题(歧义、内存冗余)及虚继承的解决方案.
2026-03-13 14:50:04
342
原创 unordered_map/hash等相关整理。
unordered_map/hash等相关整理。 由于是学习笔记后的整理,所以这篇文章比较粗略。后续改进。
2023-04-21 22:23:44
945
原创 C++ string 中 分割单词便捷的函数istringstream/stringstream
是 C++ 中的一个类,它可以将一个字符串按照某个分隔符进行分隔,并以流的形式输出每一个分隔出来的字符串。默认为 ‘ ’区分单词。循环的条件,只要能够读取到一个单词就会一直循环下去。输出的结果就是分隔出来的单词 "hello" 和 "world"。while处的使用方法发生了变化。不是 >>, 而是getline。如果需要用其他 字符 或者 字母 来区分单词,那么可以将其传递给。中读取一个单词,并将其存储到。类型的对象,因此可以将其作为。这个表达式的返回值是一个。
2023-04-21 17:35:23
1372
1
原创 栈和队列的定义与基础操作
一种特殊的线性表,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。后进先出LIFO(Last In First Out)压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。int top代表当前存放了多少个元素int capacity 代表当前申请了多少内存
2023-02-15 17:40:00
255
原创 双向链表的增删查改
实际中的链表结构非常多,例如1.单向或双向2.带头或者不带头3.循环或者非循环4.无头单向非循环5.带头双向循环6……故此,我们只需用将最简单与最复杂的结构学会并实现,理解了链表如何实现的,那么其他结构的链表也是不存在问题的。
2023-02-15 13:50:49
295
1
原创 链表的OJ题_续
返回的lessHead的地址,但结束后我们需要 free(lessHead)和free(greaterHead)的空间,所以我还需要以将lessHead的地址保存下来。那么我们需要让他们同时走到地址相同处,但我们又不知道他们的长度如何,所以两者都是一步一步的迭代,但是长的链表要先迭代他们的长度之差步。1、-1一次追不上。两个链表都先遍历第一遍,如果尾部的数据地址不相同,那必然没有相交,返回NULL即可,倘若尾部地址相同,追上的过程中:(L是环前的链表前度,C是环的长度,X是慢指针在和快指针的相遇点)
2023-02-15 12:49:15
206
原创 链表的概念和基础函数的接口实现与部分相关oj题题解
链表是一种物理存储结构上 非连续、非顺序 的存储结构,数据元素的逻辑顺序是通过链表中的 指针链接次序实现的。特点:按需申请空间,不用了释放空间。中间插入数据,不需用挪动数据不存在空间浪费缺点:每一个数据,都要存一个指针去连接后面的数据节点不支持随机访问。(用下标直接访问第i个)
2023-02-14 23:11:29
366
原创 顺序表的概念和增删查改接口实现
数据结构,主要就是对数据完成 增删查改1.线性表:顺序表、链表、栈、队列、字符串...顺序表:本质上 数组,但是在数组的基础上,要求数据是从头开始连续存储,不能有跳跃。
2023-02-14 21:06:35
439
1
原创 系统学习之C复习(11)动态内存管理
c语言中,我们关注内存中存在的: (除此以外还有其他区)栈区局部变量函数的形式参数(形参)堆区callocrealloc动态内存分配静态区全局变量静态变量(const)
2023-02-06 22:14:07
169
2
原创 系统学习之C复习(10)通讯录
首先,确认我们需要的功能,对应在加在目录中。通讯录:1.保存1000人联系人信息 每个人的信息:名字、性别、年龄、电话、地址2.增加联系人3.删除联系人4.修改联系人5.查找联系人6.排序 mian.c 实现 contact.c接口的实现通讯录的改造:动态增长版本: 1.默认运行可以存放3个人的信息。 2.当通讯录放满的时候,每次增加2个人的空间
2023-02-06 21:51:53
880
原创 系统学习之C复习(8)字符串和内存函数
(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
2023-02-06 21:02:07
89
原创 系统学习之C复习(6)数据的存储_大小端
大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。这是所用的编译器决定的。大小端的设置是为了处理高于8字节的数据存储
2023-02-06 16:17:31
111
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅