- 博客(50)
- 收藏
- 关注
原创 【C++篇】STL中list的奥秘与实现解析
摘要 本文深入探讨了C++ STL中list的使用与模拟实现。首先介绍了list的基本使用方法,包括构造、迭代器操作、容量查询和元素访问等接口。然后重点讲解了list的模拟实现过程,将其分为结点类、迭代器类和list类三部分进行封装。 在实现层面: 结点类封装了链表节点的前驱指针、后继指针和数据值; 迭代器类通过运算符重载模拟了连续访问的语义,统一了接口; list类负责管理整个链表结构。 文章还分析了封装迭代器的必要性:由于链表物理存储不连续,迭代器需要隐藏底层指针操作,提供类似vector的连续访问体验
2025-05-26 05:00:00
803
原创 【C++篇】揭秘STL vector:高效动态数组的深度解析(从使用到模拟实现)
本文详细介绍了C++中vector的使用及其底层实现,重点讲解了vector的常用接口、内存管理以及模拟实现中的常见问题。文章首先介绍了vector的基本概念和特性,包括其动态数组的特性、内存分配策略以及与其他容器的比较。接着,详细讲解了vector的构造函数、迭代器、容量管理、增删查改等常用接口的使用方法,并提供了代码示例。在模拟实现部分,文章深入剖析了vector的底层实现,重点讨论了reserve函数中的浅拷贝问题,并提供了解决方案。通过分析memcpy在自定义类型中的局限性,文章指出使用赋值重载可
2025-05-19 18:06:51
1059
原创 【Linux修炼手册】Linux开发工具的使用(二):gcc/g++与make/makefile
本文介绍了Linux环境下常用的编译工具gcc/g++以及项目自动化构建工具make/Makefile的使用方法。gcc主要用于C语言编译,g++则用于C++,二者使用原理相同。编译过程分为预处理、编译、汇编和链接四个阶段,通过不同选项控制生成不同类型的中间文件。文章还详细说明了静态链接与动态链接的区别及优缺点,静态链接将库代码直接嵌入可执行文件,而动态链接则在运行时加载共享库。此外,文章介绍了Makefile的基本结构和自动化推导功能,如何通过伪目标.PHONY实现强制重新编译,以及如何使用自动变量简化M
2025-05-12 05:30:00
1828
原创 【Linux修炼手册】Linux权限管理
一件事情是否允许你做权限认证的是身份(权限与“人(身份/角色)”有关)权限=具体用户+身份/角色用户分为root和普通用户身份分为:拥有者(u):文件和文件目录的所有者所属组(g):文件和文件目录的所有者所在的组的用户存在意义:可以给部分人给予特殊权限其他人(o):其它用户所有人(a)权限与事物的“属性”有关文件的属性:可读r、可写w、可执行x文件属性:为什么没有指定其他用户呢?除了拥有者和所属者后,剩余的就是其他用户了,所以没必要再去指定。
2025-05-06 15:51:23
776
原创 【C++篇】string类的终章:深浅拷贝 + 模拟实现string类的深度解析(附源码)
本文将通过一个自定义的字符串类实现(zhh是一个我自定义的作用域),深入探讨string类的核心设计思路与实现细节,以及为什么在拷贝构造和赋值运算符重载的实现需要用深拷贝。该代码模拟了标准库的一些核心功能,包括动态内存管理、迭代器、常用操作符重载等。同时也借此对深浅拷贝进行实际上的应用。源码在完整末尾深拷贝是管理动态资源的类的必备实现,确保对象间的独立性。浅拷贝仅适用于不涉及资源所有权的简单数据类型(如intdouble在C++中,默认拷贝构造函数和赋值运算符是浅拷贝。
2025-04-21 18:42:04
1146
22
原创 【C++篇】与STL的初见:string类的主要接口简介
接下来我们开始STL的学习之旅,进一步感受C++的给世界带来的编程盛宴。了解我们为什么要学习string类了解标准库中的string类有哪些功能可以得心应手地使用string类声明:本文只介绍string类中我们常用的功能。建议先大致阅读string类文档,大概知道string类中有哪些内容即可:🖱string下文中会讲解string类常用的部分接口。有些我会直接提供接口文档链接,点击进入即可。还有些我会提供图片目录,进入我给出的string类文档对应查找即可。
2025-04-15 14:14:29
1031
原创 【C++篇】C++模板初阶:从泛型编程到函数模板与类模板的全面解析
在C++编程中,重复编写功能相同但类型不同的代码既低效又容易出错。例如,实现一个通用的交换函数时,若为每种类型都重载一次,代码将臃肿且难以维护。C++模板技术应运而生,它通过“泛型编程”的思想,允许开发者定义类型无关的代码框架,由编译器自动生成具体类型的版本。本文将深入浅出地解析泛型编程的核心思想函数模板的原理与使用技巧,以及类模板的定义与实例化方法,帮助你掌握这一提升代码复用性与维护性的利器。返回值类型 函数名(参数列表){}
2025-04-10 13:35:47
856
4
原创 【C++篇】深入解析C/C++内存管理:从原理到实践
哈喽!我是我想吃余!我们来进入今天的学习吧!😎在C/C++开发中,内存管理是开发者必须掌握的核心技能之一。无论是手动分配释放内存的灵活性,还是由此带来的内存泄漏风险,这一领域始终充满挑战。如果你对动态内存管理有一定的了解,那么你是否曾困惑于malloc与new的区别?是否因内存泄漏导致程序崩溃却无从排查?又是否在面试中被问及“堆与栈的区别”却难以系统回答?本文以C/C++内存管理为核心,从内存分布、动态内存操作、new/delete的实现原理,到定位new。
2025-04-08 16:31:15
735
原创 【C++篇】类与对象(下篇):深入解析初始化列表、静态成员、友元与内部类的高级实践
大家好呀!我是我想吃余,一名正在学编程的小白。上篇和中篇我们已经学习了类和对象的基础知识和用法,本篇我们围绕C++面向对象编程中的高阶主题展开,结合实例代码和关键知识点,系统讲解初始化列表、explicit关键字静态成员的特性与使用场景、友元函数与友元类的设计技巧,以及内部类的独特作用。通过对比构造函数体赋值与初始化列表的差异,剖析static成员在资源管理中的妙用,并探讨友元如何有限突破封装以简化操作。助力开发者掌握C++面向对象编程的核心精髓。初始化列表十分重要,需要重点掌握!
2025-04-07 19:51:11
856
原创 【C++篇】类与对象(中篇) 解密C++类的核心:六大默认成员函数详解与避坑指南
大家好呀,我是我想吃余😁!这次我们学习的内容非常非常重要🔑,如果本章内容懵懵懂懂的话,那么将导致你无法写出一个正确的类,更别说写一个C++程序了。因此,今天的内容务必理解透彻。默认成员函数是C++的门槛,因为其内容较为抽象复杂,导致C++难学的名头流传至今😂。其实并没有这么夸张,根本不必畏惧,学完之后你会感觉:也就那回事!翻过这座大山,我们将正式踏入C++的旅程🛫本文共有9000余字(鬼知道我写了多久😪),干货满满。建议读者选择宽裕的时间学习哦🥰。
2025-04-05 13:26:40
899
原创 【C++篇】类与对象(上篇):从面向过程到面向对象的跨越
大家好,我是“我想吃余”,很高兴你能和我一起进入到C++的学习中,我会将我的学习过程中的宝贵经验不遗余力的输入到文章中,希望可以帮助到你的学习。本文涵盖了从面向过程与面向对象的区别,到类的定义、访问限定符、封装、作用域、实例化、对象大小计算,以及this指针等内容。// 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的。
2025-03-29 18:14:14
872
6
原创 【C++篇】C++入门基础(二)
话接上回,本文主要内容是讲解引用、内联函数、auto关键字、及指针空值nullptr的知识。其中引用尤为重要。基本任何场景都可以用引用传参谨慎用引用做返回值,出了函数作用域,如果对象不存在了(如在栈帧中被销毁了),就不能用引用返回,还在就可以使用引用返回auto作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得return 10;auto b = a;return 0;是一个求数据类型的函数。
2025-03-28 18:38:01
1226
5
原创 【C++篇】C++入门基础(一)
C++是在C的基础上发展的语言,其初心本是弥补C的不足,不想却成了一门新的语言。C++兼容C的所有语法。本文主要内容是讲解C++较C所补充的语法内容。声明:本文学习需要C语言的基础,因为C++语法中与C重复的内容不会赘述。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型。如:int val;命名空间可以嵌套int a;int b;int c;int d;
2025-03-27 14:38:25
956
原创 【初探数据结构】归并排序与计数排序的序曲
本文主要内容是归并的递归和非递归以及计数排序的实现方法。文章会提及很多容易忽视的易错点(大多是我自己踩过的坑😂),这是我在学习这块内容时获取的教训和宝贵经验。因为自己淋过雨,希望能为你们撑把伞!共勉!😁算法时间复杂度空间复杂度稳定性适用场景归并排序O(n log n)O(n)稳定大数据量、需稳定排序计数排序O(n + k)O(k)稳定小范围整数、非比较排序希望这篇文章对你有所帮助🌹🌹🌹。
2025-03-26 21:44:32
1143
4
原创 【初探数据结构】快速排序的四种实现方式(Hoare,挖坑,前后指针,非递归)
快速排序是一种高效的分治排序算法,核心思想是通过选定基准元素将数组划分为两部分,递归排序子数组。Hoare法挖坑法前后指针法及非递归实现,并分析其优缺点。快速排序时间复杂度ON∗logNO(N*logN)ON∗logNHoare法适合教学和理解分治思想。挖坑法在减少交换次数时表现优异。前后指针法代码简洁,适合扩展。非递归实现解决了递归栈溢出的问题,适合工程应用。gitee源码理解每种方法的核心逻辑和细节,才能在实际应用中灵活选择最优方案。
2025-03-25 10:12:11
857
2
原创 【初探数据结构】详解三大经典排序算法(选择/堆/冒泡)
特性选择排序堆排序冒泡排序时间复杂度O(n²)O(n log n)O(n²)空间复杂度O(1)O(1)O(1)稳定性不稳定不稳定稳定适用场景小数据集大数据集教学演示优点简单易实现高效的大数据排序稳定且直观缺点效率低实现较复杂效率最低希望这篇文章对你有帮助~🌹🌹🌹。
2025-03-24 16:15:44
1166
11
原创 【初探数据结构】直接插入排序与希尔排序详解
插入排序:简单但低效,适合小规模数据。希尔排序:通过分组优化插入排序,性能显著提升,是插入排序的高效变种。选择建议:数据规模较小时用插入排序,中等规模用希尔排序,大规模数据可考虑更高效的算法(如快排、归并)后序会一一讲解。
2025-03-24 10:44:51
1014
19
原创 【初探数据结构】二叉树的链式结构——分治的暴力美学
BTNode;使用左右指针实现树形结构data字段存储节点值(示例中为char类型)本文实现了二叉树的创建、遍历、统计等核心操作。读者可通过完整代码进一步实验。二叉树作为基础数据结构,其思想可延伸至AVL树、红黑树等高级结构,值得深入学习。希望这篇博客能帮助你更好地理解二叉树操作!
2025-03-22 15:04:44
1460
5
原创 【初探数据结构】堆的应用实例(堆排序与TopK问题)
应用场景核心思路时间复杂度空间复杂度优势堆排序构建堆 + 交换堆顶O(n log n)O(1)原地排序,适合内存敏感TopK问题维护大小为K的最小堆O(n log K)O(K)高效处理海量数据或数据流堆结构凭借其高效的插入删除和极致的空间利用率,在排序与筛选问题中占据独特地位。掌握堆排序与TopK的解法,能显著提升处理大规模数据的能力。理解原理后,可尝试手写堆实现或结合具体业务场景优化代码,进一步巩固知识。
2025-03-22 15:02:52
1099
原创 【初探数据结构】二叉树的顺序结构——堆的实现详解(上下调整算法的时间复杂度分析)
堆是一种基于完全二叉树的数据结构,通常分为最大堆(父节点值≥子节点)和最小堆(父节点值≤子节点)。由于完全二叉树的特性,堆可以用数组高效存储,通过索引关系快速定位父子节点。如果有⼀个关键码的集合,把它的所有元素按完全⼆叉树的顺序存储⽅式存储,在⼀个⼀维数组中,并满⾜:$K=\{ k_0,k_1,k_2,...,k_{n-1} \}$,` i = 0、1、2... `,则称为⼩堆(或⼤堆)。将根结点最⼤的堆叫做最⼤堆或⼤根堆,根结点最⼩的堆叫做最⼩堆或⼩根堆。
2025-03-21 14:26:46
686
原创 【初探数据结构】树与二叉树
树结构相对线性表就⽐较复杂了,要存储表⽰起来就⽐较⿇烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表⽰⽅式如:双亲表⽰法,孩⼦表⽰法、孩⼦双亲表⽰法以及孩⼦兄弟表⽰法等。二叉树是树形结构中我们最常用的,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。⼀个⼆叉树,如果每⼀个层的结点数都达到最⼤值,则这个⼆叉树就是满⼆叉树。完全⼆叉树是效率很⾼的数据结构,完全⼆叉树是由满⼆叉树⽽衍生出来的。要注意的是满⼆叉树是⼀种特殊的完全⼆叉树。
2025-03-20 00:41:05
1140
原创 【初探数据结构】线性表——栈与队列(代码实现与详解)
栈和队列是算法设计的基石,理解其原理和实现是程序员的基本功。建议通过实际编码练习(如实现动态栈、循环队列)加深理解,并多刷相关面试题提升应用能力。
2025-03-11 06:00:00
1103
5
原创 【初探数据结构】带环链表:原理、判断与数学证明
由节点构成的链式结构中存在至少一个节点,其指针域指向链表中已存在的节点,形成闭合环路。环路结构:尾节点不指向NULL而指向历史节点遍历特性:从任意环内节点出发将陷入无限循环。
2025-03-10 06:00:00
1117
6
原创 【初探数据结构】链表OJ算法——快慢指针
如果读者觉得不过瘾,那就再来两题吧~141. 环形链表 - 力扣(LeetCode)19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)本文只讲解了两个简单的题目,目的在于帮助读者打好基础,下一篇文章将要讲解的带环链表也会用到快慢指针,届时读者可以对其有更深层次的认知。
2025-03-07 15:05:57
1453
3
原创 【初探数据结构】线性表——链表(二)带头双向循环链表(详解与实现)
带头双向循环链表,顾名思义,包含以下几个重要特点:每个结构体包含:带头双向循环链表支持常见的增删查改操作,以下是常用操作的实现。在初始化时,创建一个头节点,并将其和指针都指向自身,这样链表初始时是空的,并且形成了一个循环结构。用于执行具体的插入操作,它将新节点插入到链表末尾。3.3 删除节点尾删操作:删除链表尾部的节点。头删操作:删除链表头部的节点。3.4 查找节点通过值查找链表中的节点。3.5 删除指定节点通过指针删除指定位置的节点。4. 带头双向循环链表的优势简化
2025-03-06 12:54:34
1261
24
原创 【初探数据结构】链表OJ算法——哨兵位(合并两个有序链表详解)
如果这道题不用哨兵位,你将会被一个错误搞的焦头烂额——对空指针解引用,不相信的话你可以去试试,你一定会影响深刻的。通过这道题,是不是觉得哨兵位真的很香?非常省事,特别是这种多链表的联合问题,我们一定要留个心眼。
2025-03-05 08:16:24
886
原创 【初探数据结构】线性表————链表(一)(单链表的实现)
链表是一种物理存储结构非连续、非顺序的线性数据结构。与数组不同,链表的元素通过指针链接形成逻辑上的顺序关系。每个节点包含两部分:链表的优势:每个节点都是一个结构体,这个结构体包含2个(单链表)或者3个成员(双链表)。指针域:指向下一个节点的指针:指向上一个节点的指针数据域:存储数据各个节点通过指针相互链接,构成了链表链表一共有8种这三个特性自由组合,就组成了8种链表我们主要研究这两种链表:这两种链表吃透后,剩余的也就自然而然的学会了。头文件编写:SList.h插入节点尾插
2025-03-04 16:59:54
889
原创 【初探数据结构】线性表———顺序表的详解和实现
线性表是n个具有相同特性的数据元素的有限序列,其特点为逻辑上连续,但在物理存储上可分为顺序存储和链式存储。顺序表(本文重点)链表栈队列字符串4// 初始容量// 数据存储数组int size;// 当前元素个数// 当前分配的总容量} SeqList;
2025-02-25 01:04:52
1278
3
原创 【初探数据结构】时间复杂度和空间复杂度
时间复杂度关注算法执行次数的增长趋势,空间复杂度关注额外空间的占用。大O渐近表示法通过简化表达式,聚焦主要矛盾。实际应用中需结合具体场景选择最优算法。
2025-02-24 17:58:22
1362
2
原创 高阶C语言|程序编译与预处理:从源代码到可执行的奥秘
/ 输出当前文件和行号理解编译与预处理机制,能帮助开发者写出高效、可维护的代码。掌握宏的使用技巧、避免常见陷阱,是进阶C语言编程的必经之路。推荐阅读《程序员的自我修养》和《高质量C/C++编程指南》,深入探索底层原理。参考书籍《程序员的自我修养》简明VIM教程。
2025-02-20 09:42:55
825
6
原创 高阶C语言|文件操作——你不知道的文件小秘密
文件操作的世界其实并没有你想象的那么复杂。只要掌握了文件打开、读写、关闭的基本技巧,再加上对fseek和rewind这些“小工具”的灵活运用,你就能轻松自如地管理你的文件了。所以,下次当你面对文件时,不要再紧张了!只要记得好好地与它互动,文件也会变成你忠实的小伙伴,陪你一起完成各种任务,轻松搞定所有挑战。
2025-02-17 14:43:53
1574
原创 C/C++程序的内存是如何开辟的?
在 C/C++ 编程中,内存的分配和管理是非常关键的,因为它直接影响到程序的性能、效率和稳定性。C/C++ 提供了不同的内存分配方式,主要分为栈内存分配和堆内存分配。每种内存分配方式都有其适用的场景和优缺点。以下是对 C/C++ 程序的内存开辟的详细解析。
2025-02-13 18:00:00
1393
原创 高阶C语言|动态内存管理
动态内存管理为 C/C++ 程序提供了极大的灵活性,可以帮助开发者根据程序的需要动态分配和释放内存。然而,动态内存管理的错误使用会导致许多问题,如内存泄漏、悬挂指针、内存越界等。因此,开发者需要小心谨慎,确保每一块动态分配的内存都被正确管理。掌握动态内存管理的技巧将有助于提高程序的性能和可靠性。希望这篇博客能够帮助你理解和掌握 C/C++ 中的动态内存管理。如果你有任何问题,欢迎留言讨论!
2025-02-13 12:41:45
1346
原创 高阶C语言|枚举与联合
在C/C++语言中,枚举(enum) 和 联合(union) 是两种重要的数据类型,它们在不同的应用场景下发挥着独特的作用。枚举适用于定义一组有限的取值,提高代码的可读性和安全性,而联合则用于多个变量共享存储空间,节省内存。在本篇文章中,我们将详细探讨枚举和联合的概念、定义方式、优缺点以及使用示例。
2025-02-10 06:00:00
2302
33
原创 高阶C语言|和结构体与位段的邂逅之旅
本文探索了高阶C语言的核心特性,并深入分析了结构体和位段在C语言中的应用与交互。首先,阐述了结构体作为C语言中数据组织的重要方式,它能够有效地将不同类型的数据组合在一起,适应多样化的程序设计需求。接着,分析了位段作为结构体中的一个高级特性,如何通过控制数据存储空间,实现高效的内存使用和精确的数据表示。通过实例展示了结构体与位段结合使用的场景,重点讨论了如何在不同的硬件平台和操作环境下,利用这些特性优化代码和提高程序的执行效率。最后,探讨了结构体与位段在实际开发中的应用价值,特别是在嵌入式系统和网络协议设计中
2025-02-07 16:04:32
1643
7
原创 高阶C语言|通讯录管理系统(详解+完整代码)
在实际开发中,将不同功能封装到不同的源文件中是很常见的做法,可以有效提高代码的可读性和可维护性。每次添加一个联系人,我们都会提示用户输入联系人姓名、年龄、性别、电话和地址,并将其存储到。在这个文件中,我们将测试所有功能,用户可以选择相应的操作,程序会根据用户输入调用不同的函数。结构体,包含了一个存储联系人信息的数组和当前已经存储的联系人个数。每个联系人信息是一个。首先,我们需要一个初始化函数来清空通讯录,并将联系人数量设置为 0。在这个文件中,我们实现了通讯录的具体功能,包括联系人信息的增删改查、排序等。
2025-02-03 19:16:55
1317
17
原创 高阶C语言|深入理解字符串函数和内存函数
在C语言中,字符和字符串是常用的数据类型。然而,C语言并没有专门的字符串类型,所有字符串都是通过字符数组或字符串常量来表示。为了处理这些字符串,C语言提供了许多强大的库函数。本文将详细介绍这些常用的字符和字符串处理函数,以及它们的使用方法和注意事项。
2025-01-27 20:13:05
2120
2
原创 高阶C语言|数组名的深度解析(数组名结合sizeof与strlen的详解)
在C语言中,数组和指针是两大基础知识点,理解它们的内在联系对于编写高效的代码至关重要。尤其是在面试过程中,数组和指针相关的题目经常出现在笔试和面试中。本文将通过详细的例子和解析,帮助你更好地理解数组名的各种含义。sizeof(数组名):计算整个数组的大小。&数组名:表示整个数组的地址。数组名:在大多数情况下,表示数组首元素的地址,类似指针。strlen:用于计算字符串的长度,但仅适用于字符数组或指向字符串的指针。
2025-01-24 21:09:00
1968
30
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人