- 博客(34)
- 收藏
- 关注
原创 【C++】map和set的使用
目录1. 序列式容器和关联式容器2. set系列的使用2.1 set和multiset参考文档 - C++ Reference2.2 set类的介绍2.3 set的构造和迭代器2.4 set的增删查2.5 insert和迭代器遍历使用样例:2.6 find和erase使用样例:2.7 multiset和set的差异2.8.lower_bound和upper_bound练习:2.8 349. 两个数组的交集 - 力扣(LeetCode)2.9 142. 环形链表 II - 力扣(LeetCode)3. map
2025-03-05 21:39:20
1659
54
原创 【数据结构】二叉搜索树
本文主要介绍二叉搜索树,其概念为左子树节点值小于根节点,右子树节点值大于根节点,插入时依此规则确定位置。性能方面,最优时类似完全二叉树,时间复杂度低;最差时退化为单支树,时间复杂度高,平衡二叉搜索树等为此而生。实现上,插入操作在树空或遍历找到合适位置后插入新节点;查找是依据节点值大小比较来确定查找方向;删除需分多种情况处理,以维持二叉搜索树特性。使用场景包括 key 搜索场景如小区车库车牌识别、文章单词拼写检查,以及 key/value 搜索场景如中英互译字典、商场车库计费、文章单词计数等,还给出了相应代码
2025-01-09 16:38:45
1760
46
原创 【C++】多态
本文围绕 C++ 多态展开,涵盖概念、动态多态的定义及实现、纯虚函数与抽象类、动态多态原理等内容。先是通过实例引出多态概念,接着介绍动态多态构成条件,包括虚函数、重写规则等,还探讨了如协变、析构函数重写、override 和 final 关键字等相关问题,以及重载、重写、隐藏的对比。对于纯虚函数和抽象类,解释其特点与关系,并以车的示例说明。在动态多态原理部分,介绍虚函数表指针,阐述动态多态实现方式、动态绑定与静态绑定,以及虚函数表的构成与作用等,还展示相关代码及运行结果辅助理解。
2024-12-28 15:20:28
2540
54
原创 【C++】继承
本文全面介绍 C++ 继承相关内容。包括继承的概念及定义,用实例展示如何通过继承实现代码复用及不同继承方式下基类成员访问变化;基类和派生类转换,说明子类可赋值给基类但反之不行;继承作用域中的隐藏规则及相关选择题;派生类默认成员函数生成方式及不能被继承的类的实现;继承与友元、静态成员的关系;多继承及菱形继承问题,如虚继承解决数据冗余和二义性、指针偏移问题及 IO 库中的菱形虚拟继承;最后对比了继承(is - a)和组合(has - a)的关系。
2024-12-11 19:54:32
2331
62
原创 【C++】string类的模拟实现
本文围绕 C++ 中 string 类展开。首先介绍了 string 类的模拟实现,包括构造函数、浅拷贝与深拷贝问题,以及拷贝构造和赋值运算符重载的传统与现代写法。现代写法利用临时对象和自动析构特性,提高效率与资源利用率。还介绍了 string 类的其他接口如迭代器和各种操作函数等。接着说明了在 vs 和 g++ 下 string 的结构特点。此外提到了写时拷贝的概念及读取缺陷。最后给出了扩展阅读方向。
2024-12-02 22:56:28
1596
64
原创 【C++】模板进阶
本文介绍了 C++ 中的非类型模板参数、模板特化和模板分离编译。非类型模板参数可作为常量使用,能创建不同大小的静态数据结构。模板特化包括函数模板特化和类模板特化,用于处理特殊情况,其中函数模板特化不推荐使用,类模板特化有全特化和偏特化等形式。模板分离编译是将程序分为多个源文件分别编译,对于模板的分离编译可能会出现问题,可通过一些方法解决。文章还介绍了模板的一些应用示例及注意事项。
2024-12-02 19:15:56
1320
25
原创 【C++】stack和queue
本文介绍 C++ 中的 stack、queue 和 priority_queue。stack 模拟数据结构栈,有常用接口如 push、pop 等,底层默认容器为 deque。queue 模拟队列,先进先出,底层也可用 deque,介绍了 deque 的原理、优势缺陷及为何作为 stack 和 queue 底层容器。priority_queue 本质是堆,默认大堆,可通过仿函数控制大小堆及自定义类型比较,展示了在 OJ 中的用法和模拟实现,通过对 vector 封装和堆排序算法实现。
2024-11-30 22:24:26
2117
59
原创 每日一练:【动态规划算法】斐波那契数列模型之使用最小花费爬楼梯(easy)
本文介绍“746. 使用最小花费爬楼梯”题目。该题楼顶为数组外下一个位置,用动态规划有两种解法。解法一设 dp[i]是以 i 为结尾跳到 i 台阶的最小花费,通过 dp[i - 1]、dp[i - 2]得出状态转移方程,初始化 dp[0]和 dp[1]后从左往右填表,返回 dp[n]。解法二设 dp[i]为从 i 出发到楼顶的最小花费,根据 dp[i + 1]、dp[i + 2]确定状态转移方程,初始化 dp[n - 2]和 dp[n - 1]后从右往左填表,返回 min(dp[0],dp[1])。
2024-11-24 15:46:49
1037
38
原创 每日一练:【优先算法】双指针之快乐数(medium)
本文介绍 “202. 快乐数” 题目。该题对正整数进行每个位置数字平方和的变换,分析得出一个数经多次变换要么变为 1,要么无限循环。采用快慢指针方法解决,先介绍前置知识,即快慢指针在带环链表中一定会相遇且相遇位置在环节点。本题的计算过程可视为带环链表,通过模拟快慢指针,每次 slow 走一步、fast 走两步,判断是否会相遇于值为 1 的节点,给出了相应算法代码。
2024-11-24 13:57:57
851
21
原创 【C++】list容器及其模拟实现
本文介绍了 C++ 中的 list。首先讲解了 list 的介绍与使用,包括底层结构为带头双向循环链表,常见接口如构造函数、迭代器用法、容量操作、元素访问、修改操作等,还介绍了迭代器失效问题及处理方法。接着模拟实现了 list,包括节点结构、功能接口、迭代器实现、构造与析构函数等。此外,还介绍了 list 的反向迭代器实现,并对比了 list 与 vector 的底层结构、特性及应用场景。
2024-11-24 12:12:41
2005
31
原创 每日一练:【动态规划算法】斐波那契数列模型之三步问题(easy)
本文介绍 “面试题 08.01. 三步问题”。题目为小孩跳台阶问题,可一次跳一层、两层或三层台阶,求跳到 n 阶的方法数并取模 1e9+7。用动态规划求解,状态表示以第 i 位置结尾,dp [i] 存到达 i 位置的方法数。状态转移方程为 dp [i]=dp [i - 1]+dp [i - 2]+dp [i - 3]。初始化 dp [1]=1、dp [2]=2、dp [3]=4。填表顺序从左往右,返回值为 dp [n]。给出算法代码,强调取模时每计算一次都需取模,避免溢出导致答案错误。
2024-11-21 01:05:43
654
33
原创 每日一练:【优先算法】双指针之复写零(easy)
本文介绍 “1089. 复写零” 题目。该题要求遇到一个 0 就复写一次,原数组元素后移。先分析异地做法,再尝试原地操作,发现双指针正向走会覆盖非 0 数,改为从后往前走,让 dest 先走,通过模拟异地操作找到新数组最后一个位置,处理可能出现的越界情况,最终实现原地复写零操作,给出了相应算法代码。
2024-11-21 00:33:08
657
12
原创 每日一练:【动态规划算法】斐波那契数列模型之第 N 个泰波那契数(easy)
本文介绍 “1137. 第 N 个泰波那契数” 题目。该题要求求出第 n 个泰波那契数,采用动态规划算法求解。包括状态表示为以第 i 个位置为结尾,dp 表第 i 个位置的值表示第 i 个泰波那契的值;状态转移方程为 dp [i]=dp [i - 1]+dp [i - 2]+dp [i - 3];dp 表初始化 dp [0]=0、dp [1]=dp [2]=1;填表顺序从左往右;返回值为 dp [n]。还介绍了滚动数组优化,利用只需要前三个位置的值,避免开辟 O (n) 空间,用几个变量迭代实现相同功能。
2024-11-19 18:16:20
517
5
原创 每日一练:【优先算法】双指针之移动零(easy)
本文以 “283. 移动零” 题目为例介绍双指针概念。该题要求将数组中的非零元素移到前面且保持相对位置不变,零放在后面且不要求相对顺序。采用双指针方法,通过同向移动指针将数组分为已处理非零数、待放零的区间和未处理数据三部分。每次遇到零,src 指针移动,dest 不动;遇到非零数,先移动 dest 指向零,再交换 dest 与 src 指向的值并移动 src。当 src 遍历完数组,所有数据处理完毕。此方法基于数组分块思想,实现原地操作且空间复杂度为 0。
2024-11-19 17:45:53
752
3
原创 【C++】vector
本文介绍了 C++ 中的 vector。首先讲解了 vector 的介绍与使用,包括各种构造函数、迭代器用法、空间增长问题、增删查改操作及迭代器失效问题,还介绍了 vector 在 OJ 中的使用。接着深度剖析并模拟实现了 vector 的核心框架接口,分析了使用 memcpy 拷贝的问题及动态二维数组的理解,强调涉及资源管理时不能用 memcpy,展示了如何用 vector 构建动态二维数组。
2024-11-18 21:59:37
1317
8
原创 【C++】string类(附题)
本文介绍了 C++ 标准库中的 string 类。学习 string 类是因为 C 语言字符串有不足且实际中广泛使用 string 类。string 类类似字符容器,支持不同编码。文中讲解了 auto 和范围 for 的用法,以及 string 类的常用接口,包括构造、容量操作、访问遍历、修改操作和非成员函数等。还通过多个编程题目展示了 string 类的实际应用,如反转字母、找唯一字符、计算最后单词长度、验证回文、字符串相加、翻转字符串等,帮助读者深入理解 string 类的功能和用法。
2024-11-15 11:32:51
1208
9
原创 【C++】模板初阶
本文介绍了 C++ 模板编程基础。包括泛型编程,利用模板避免重复代码,实现通用功能;函数模板,有概念格式、原理实例化及参数匹配原则,可根据实参推演或显式指定类型;类模板,涵盖定义格式、实例化方法及按需实例化问题,不建议声明定义分离,按需实例化时使用成员函数才实例化,不影响基本语法检查。总之,模板为 C++ 编程提供了强大的代码复用手段,方便实现通用功能和适应不同类型需求。
2024-11-10 14:13:40
1058
7
原创 【C++】C/C++内存管理
本文深入讲解了 C/C++ 的内存分布以及不同的内存管理方式。内容涵盖 C 语言中的动态内存管理函数(malloc/calloc/realloc/free),C++ 的内存管理方式(new/delete 和 operator new/operator delete),new 和 delete 的实现原理,定位 new 表达式以及 malloc/free 和 new/delete 的区别等多个重要方面。通过丰富的代码示例和详细的解释,为读者清晰地呈现了 C/C++ 内存管理的核心知识和关键要点。
2024-11-04 21:54:05
976
16
原创 【C++】类和对象(附题)
本文详细介绍了 C++ 中类的多个重要概念,包括类的定义、实例化、this 指针、与 C 语言实现 Stack 对比、类的默认成员函数、构造函数、析构函数、拷贝构造函数、赋值运算符重载、取地址运算符重载、再探构造函数、类型转换、static 成员、友元、内部类、匿名对象和对象拷贝时的编译器优化等内容,为 C++ 学习者全面阐述了类相关的知识要点。
2024-10-24 14:32:02
1389
12
原创 【C++】C++基础
本文全面介绍 C++ 多个重要特性。包括 C++98 关键字,首个程序的 C 与 C++ 对比写法。详细阐述命名空间的价值、定义及使用方法,可解决命名冲突,能嵌套且多文件同名会合并。还涵盖 C++ 输入输出、缺省参数、函数重载、引用、内联函数和 nullptr。引用可简化传参,const 引用有特定用途。内联函数替代宏函数但要注意代码膨胀。nullptr 避免了 C++ 中 NULL 的风险。为 C++ 学习者提供了丰富的知识内容。
2024-10-02 20:07:54
1633
8
原创 【初阶数据结构】常见五大排序算法及部分算法优化讨论
本文全面介绍了排序的概念、常见排序算法的实现、复杂度及稳定性分析、选择题练习以及外排序之文件归并排序实现。排序可分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序等。每种算法都详细阐述了其基本思想、实现步骤、算法复杂度、特性总结等内容。还分析了排序算法的稳定性,并通过选择题练习加深理解。最后介绍了外排序的概念和文件归并排序的实现方法,包括创建随机数据文件、思路分析和代码实现。
2024-09-15 23:24:00
1123
9
原创 【初阶数据结构】顺序表与链表的比较(附题)
本文主要对比了顺序表和带头双向循环链表的区别,包括存储空间、随机访问、插入操作、扩容问题以及缓存利用率等方面。顺序表在存储空间上物理连续,支持随机访问,但插入元素可能需搬移数据且扩容存在消耗和空间浪费问题;链表逻辑连续但物理不一定连续,可按需申请节点无需考虑扩容,在任意位置插入方便但不支持随机访问。在缓存利用率方面,顺序表缓存命中率高,链表因节点物理地址不连续易出现缓存污染导致命中率低。二者各有优劣,互为补充。
2024-08-22 16:30:43
816
4
原创 【初阶数据结构】算法复杂度
本文围绕算法效率展开,包括时间复杂度和空间复杂度以及复杂度相关的编程练习。首先阐述了衡量算法好坏的原因,引出算法复杂度概念,其包括时间和空间复杂度,如今一般更关注时间复杂度,介绍了时间复杂度的概念、大 O 渐进表示法、常见时间复杂度计算举例等内容,还分析了空间复杂度的计算规则及常见示例。最后通过复杂度的 OJ 练习,如消失的数字和旋转数组问题,展示了不同思路下的时间和空间复杂度差异及以空间换时间的常见做法。
2024-08-20 21:48:06
789
6
原创 【初阶数据结构】数据结构前言
本文介绍了数据结构和算法的基本概念、重要性以及学习方法。数据结构是计算机存储和组织数据的方式,算法是将输入转化为输出的计算步骤。其重要性体现在校招笔试和面试中,大厂笔试多为算法题且难度大,面试也常考算法及相关知识。在未来工作中,对程序员也至关重要。学习方法包括死磕代码和注意画图与思考。书籍及资料推荐有《剑指 offer》《程序员代码面试指南》和 LeetCode。
2024-08-18 08:39:41
356
2
原创 【初阶数据结构】链表(附题)
本文全面阐述链表相关内容。首先分析顺序表存在的问题,引出链表诞生的原因。接着详细介绍单链表,包括概念、结构、实现方法(如节点定义、各种插入删除操作、查找、在指定位置操作及销毁链表),并通过通讯录项目展示其应用。然后是链表 OJ,涵盖多种常见编程问题及思路。还介绍了链表的分类及实际常用结构。最后阐述双向链表,包括节点定义、各种操作实现(打印、申请节点、插入删除、查找、在指定位置操作、判空和销毁),为读者深入理解链表提供了丰富内容。
2024-08-17 22:35:00
1123
8
原创 【C++】C++前言
本文全面介绍了 C++ 语言。包括其定义为在 C 语言基础上引入面向对象概念的编程语言,涵盖面向过程与面向对象编程特点;发展历史可追溯至 1979 年,历经标准化等过程;版本不断更迭,有丰富的语法更新;提供了参考文档链接;阐述了其在编程语言排行榜中的地位、广泛的应用领域以及学习方法,如他人学习经验分享和个人学习建议,包括多总结、常看书、勤刷题及推荐书籍等。
2024-07-23 15:37:41
1620
12
原创 【初阶数据结构】二叉树(附题)
本文全面阐述树与二叉树。树是非线性数据结构,有根节点、子树等概念,可通过多种方式表示。二叉树是特殊的树,有满二叉树、完全二叉树等类型,性质明确,可顺序或链式存储。二叉树顺序结构围绕堆展开,包括堆的概念、实现及应用如堆排序和 TOP-K 问题。链式结构涵盖遍历方式及多种功能实现,如节点计数、查找、判断完全二叉树和求高度等,还给出相关 OJ 练习及解法,文末附二叉树创建销毁代码与队列实现代码。
2024-06-21 12:58:27
956
5
原创 【初阶数据结构】栈和队列(附题目)
本文全面介绍栈和队列。栈是特殊线性表,只允许在固定一端操作,遵守后进先出原则。实现时一般用数组更优,介绍了栈的结构体及初始化、入栈出栈等操作函数。队列是特殊线性表,允许一端插入一端删除,先进先出。用链表实现更优,介绍了队列结构体及初始化、入队出队等操作。还给出了栈和队列的面试题解法,如括号匹配用栈实现,用队列实现栈和用栈实现队列,设计循环队列对比了数组和链表实现方式。文末附上了栈和队列的源码,包括头文件和源文件,方便理解和使用。
2024-05-30 00:18:00
2169
12
原创 【初阶数据结构】链表经典OJ(8道)
本文介绍了八个与链表相关的编程问题及解法。包括删除链表中特定值的节点、反转单链表、找出链表中间节点、获取链表倒数第 k 个节点、判断链表是否为回文结构、找出两个链表第一个公共节点、判断链表是否有环及返回入环第一个节点、实现链表的深度拷贝。每个问题都给出了详细的思路分析和 C 语言代码实现,利用了快慢指针等方法解决不同类型的链表问题。
2024-05-16 22:20:46
1174
6
原创 【C语言】项目实践-贪吃蛇小游戏(Windows环境的控制台下)
本文介绍用 C 语言实现贪吃蛇游戏,功能包括地图绘制、吃食物、撞墙 / 自身死亡、得分、加速减速、暂停等。技术要点含多种 C 语言特性及 Win32 API。补充知识有 Win32 API 操作及 C 语言国际化本地化。游戏实现分多个模块,初始化窗口等后,运行中按键检测、移动蛇身、判断状态,结束时释放资源并提示原因。还解决了重玩问题,给出参考代码及附录参考汉字字符集编码信息。
2024-05-04 23:33:04
1409
11
原创 【初阶数据结构】:顺序表及其通讯录应用
本文围绕数据结构中的顺序表展开。首先阐述数据结构存在的原因及线性表的定义与特点。接着重点介绍顺序表,包括静态顺序表(定长数组存储,有空间问题不推荐)和动态顺序表(动态开辟数组,实现增删查改等功能,有一定缺点但相对较好)。通过通讯录案例展示顺序表应用,涵盖动态顺序表实现的添加、删除、查找、修改等功能及文件操作,还给出静态顺序表实现通讯录的代码及注意事项,包括初始化、销毁、插入、删除等操作,为理解顺序表提供了具体示例。
2024-04-21 23:31:02
1271
18
原创 【C语言】编译与链接
本文详细介绍了 C 语言的翻译环境与运行环境。翻译环境由编译和链接组成,编译又包括预处理、编译、汇编三个过程。预处理处理预编译指令、展开宏定义等;编译进行词法、语法、语义分析并生成汇编代码;汇编将汇编代码转为二进制指令;链接解决多文件调用问题。运行环境包括程序载入内存、执行 main 函数、使用堆栈和静态内存及终止程序等。作者强调自身知识有限,推荐读者阅读《程序员的自我修养》深入学习。
2024-03-31 14:17:53
786
4
原创 【C语言】浮点数在内存中的存储及精度问题
本文探讨计算机中浮点数的存储与精度问题。首先指出计算机对浮点数和整数处理方式不同,浮点数可转化为二进制科学计数法形式存储,关键在于 S、M、E 三个部分,且有针对 M 和 E 的特殊存储规定。浮点数取出也有特定规则,根据 E 的不同情况判断数据正负等。同时,浮点数存在精度丢失问题,会导致数值与预期不同,且不能直接用 “==” 比较大小,需通过差值与规定精度进行比较,包括自定义精度和系统精度下的比较方法。
2024-03-20 23:27:02
1488
6
原创 菜鸟初来咋到啦
对于编程的学习,语法是迈不过去的坎,这里推荐各位自学的朋友可以看看B站、中国大学Mooc、网易公开课、大学资源网等,同时记一些笔记还是有必要的,可以帮助大家比较清晰的理解编程核心语法,同时,编程是要自己多敲敲代码的,不然脑子会了,手可不会。在写这篇文章时,本人还是一枚大一的萌新,选择的是机械方面的专业,因为竞赛、专业发展等种种缘故,开始接触编程,相信屏幕前的朋友们应该也遇到相似的境况。~~,各位屏幕前正在阅读的朋友们,大家好,怀揣着对未来的憧憬加入优快云这个大家庭,很高兴能在这里与大家相遇。
2024-01-17 10:48:51
600
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人