- 博客(37)
- 收藏
- 关注
原创 【C++ STL篇(十三)】无序关联容器 unordered_set / unordered_map解析
因为之前已经详细讲解过 map和set 所以本文对一些重复度较高的部分就没有过多赘述,有需要的小伙伴可以看看博主往期的文章。꜀(˘꒳˘ ꜀)【C++ STL篇(八)】set容器——零基础入门与核心用法精讲【C++ STL篇(九)】map容器——零基础入门与核心用法精讲【C++ STL篇(十二)】红黑树の影分身:一棵树如何同时化身 map 和 set(万字拆解+源码)今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?
2026-05-29 17:46:48
518
8
原创 【C++ STL篇(十二)】红黑树の影分身:一棵树如何同时化身 map 和 set(万字拆解+源码)
今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?
2026-05-26 16:19:43
1018
20
原创 【C++ STL篇(十一)】深入浅出红黑树:从原理到实现,一篇搞定
今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?
2026-05-23 18:16:40
1293
26
原创 【C++ STL篇(十)】深入理解 AVL 树:代码实现、旋转图解与平衡因子详解
在聊 AVL 树之前,我们先回顾一下普通的二叉搜索树(BST)。二叉搜索树规定:对于任意一个节点,其左子树所有节点的值都比它小,右子树所有节点的值都比它大。这个特性使得查找一个值的时间复杂度在理想情况下是O(log N)。但二叉搜索树有一个致命的缺陷:如果插入的数据本身就是有序的,比如依次插入,那么这棵树会退化成一根“链表”。此时查找效率骤降为O(N),完全丧失了树形结构的优势!AVL 树正是为了解决二叉搜索树退化为链表的问题而诞生的。它在二叉搜索树的基础上增加了一个“平衡”规则,强制树保持“高度平衡。
2026-05-21 16:46:21
1168
17
原创 【C++ STL篇(九)】map容器——零基础入门与核心用法精讲
今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?
2026-05-18 11:59:55
1017
20
原创 【C++ STL篇(八)】set容器——零基础入门与核心用法精讲
今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?
2026-05-15 17:18:03
956
22
原创 【C++ 二叉搜索树】 一文吃透二叉搜索树:原理、增删与代码实现
二叉搜索树(Binary Search Tree,BST),也叫二叉排序树,是一种特殊的二叉树。它要么是空树,要么必须满足以下所有如果左子树不为空,那么左子树上所有节点的值都小于根节点的值。如果右子树不为空,那么右子树上所有节点的值都大于根节点的值。它的左右子树本身也必须是二叉搜索树。任何一个节点,左边全比我小,右边全比我大。有些 二叉搜索树不支持插入重复值(如 C++ 的 set / map),有些支持(如 multiset / multimap)。本文代码选择的策略是不支持插入相等值。
2026-05-13 07:42:13
1331
17
原创 【C++ 多态】虚函数 · 虚表 · 重写,一篇彻底弄明白!
多态”这个词,字面上就是“多种形态现实中这种例子很多:同样是“买票”这件事,普通人买是全价,学生可能打五折,军人则享受优先服务。同样是“动物叫”,猫发出“喵喵”,狗发出“汪汪”。不同对象对同一个消息给出不同的响应,这就是多态。编译时多态(静态多态):在编译阶段就确定调用哪个函数。典型代表是函数重载和函数模板。你传一个int,编译器匹配f(int);传一个double,匹配f(double)。这个过程在编译时就已经搞定了。运行时多态(动态多态):直到程序运行时,才根据实际指向的对象来决定调用哪个函数。
2026-05-11 07:38:00
676
14
原创 【C++ 继承】万字拆解:从入门到设计哲学,彻底搞懂每一个坑
继承是面向对象程序设计中实现代码复用的最重要的手段。它不是在函数层面复用(比如写一个通用函数到处调用),而是在类的设计层面进行复用。我们可以在保持原有类特性的基础上,通过继承来扩展新类,增加新的成员变量和成员函数。新产生的类叫做派生类,也叫子类;被继承的类叫做基类,也叫父类。这种叫法源于翻译习惯,我们后面会混用这些称呼。class 派生类名 : 继承方式 基类名 {// 派生类新增的成员 };
2026-05-08 18:47:27
1475
16
原创 【C++ 模版进阶】一文吃透非类型模板参数、模版的特化、模版的分离编译!
typename T或class TT代表一个类型。T* _a;int _top;// ...但在某些场景下,我们希望在编译期就确定一些数值,比如数组的大小, 此时就可以使用非类型模板参数,它传递的是一个常量值,而不是类型。看下面的代码 (用整数常量作为栈的大小)template<size_t N> // N 是一个非类型模板参数private:int _a[N];int _top;int main()// N = 10,_a 是 int[10]
2026-04-30 19:38:51
614
22
原创 【C++ STL篇(七)】一篇带你搞定 stack/queue/deque/priority_queue
仿函数,或者叫函数对象,是指任何一个可以像函数一样被调用的对象。class Lesspublic:public:仿函数通过成员变量维护内部状态,实现有状态(保留了之前的调用信息)的可调用对象,且多个仿函数实例可以各自拥有独立状态,互不干扰。它可以被编译器内联,还可以作为模板参数传递。今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-04-28 13:57:11
820
22
原创 【C++ STL篇(六)】啃完这篇,彻底拿捏 list 底层原理!
class listpublic:// 通过不同的模板实参生成两种迭代器private:// 指向哨兵节点// 维护链表长度的计数器哨兵节点(也叫头节点)是带头双向循环链表的标志。它是一个真实存在的节点,不存储有效数据(其_data用默认值填充),它的_next指向第一个有效节点,_prev指向最后一个有效节点。空链表时,和都指向自己。今天的内容到这里就结束了,希望你能有所收获~干货整理到手抖,觉得有用的话,赏个三连回回血?代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-04-24 20:41:24
1108
24
原创 【C++ STL 篇(五)】手撕vector:从零开始,手把手带你造轮子!
对于vectorpublic:我们还需要提供begin()和end()的const和非const操作是否重新分配内存失效的迭代器push_back若 size==capacity若扩容,所有迭代器失效;否则仅 end() 失效pop_back否被删除元素的迭代器和 end() 失效insert若 size==capacity若扩容,所有迭代器失效;否则插入点及之后失效erase否被删除元素及之后所有迭代器失效reserve若 n>capacity若扩容,所有迭代器失效。
2026-04-20 17:35:53
954
17
原创 【C++ STL篇(四)】一文拿捏vector常用接口!
今天的内容到这里就结束了,希望你能有所收获~代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-04-18 17:26:24
776
10
原创 【C++ STL篇(三)】从零实现一个string 类——手把手教你造轮子
/ 必须在 cpp 文件中定义静态成员变量需要在类外单独定义,否则链接时会报"未定义引用"错误。这里赋值为 -1 是因为size_t是无符号类型,-1 转换后就是最大的size_t值。今天的内容到这里就结束了,希望你能有所收获~代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-04-15 17:31:09
1041
14
原创 【C++ STL篇(二)】C++ STL string万字剖析(下篇)新手也能看懂!
返回字符串最后一个字符的引用。字符串不能为空。对空字符串调用back()是未定义行为。s.back()等价于或(但无边界检查)。int main()cout << "最后一个字符:" << s.back() << endl;// 'o'// 修改最后一个字符// "Hellp"return 0;移除字符串的最后一个字符,将size()减少 1。字符串不能为空,否则行为未定义。O(1),不会重新分配内存。// "hello"查找str中任意字符在字符串中最后一次出现的位置。
2026-04-13 18:32:51
682
14
原创 【C++ STL篇(一)】耗时3天整理!C++ STL string万字剖析(上篇)新手也能看懂!
STL= 标准模板库,是C++自带的、帮你搞定“常用数据结构和算法”的一套工具包。你不用自己写链表、不用自己写排序算法,STL已经帮你写好了,而且写得又快又稳。୧(´▽`★)୭因为编译器只推导第一个变量的类型,后面的变量都得用这个类型。// 正确,都是 int// 错误!c 是 int,d 推导出 double,冲突接口功能简述是否改变 size()是否改变 capacity()是否改变内容size()length()获取当前字符数否否否max_size()获取理论上最大容量否否。
2026-04-12 13:38:30
748
5
原创 【C++模版初阶】告别重复造轮子!让代码“活”起来~
class 类模版名//类内成员定义public:// 其他成员函数...private:T* _array;// 指向动态数组的指针,数组元素类型为 T这里的T还是一个类型占位符。你可以叫它T,也可以叫Type, 只要统一就行。编译器会在你真正使用这个类的时候,把T替换成真实的类型(比如intdoubletypename和class在这里完全等价,用哪个看个人习惯。不过,老派程序员好像更偏爱class(¯▽¯)ゞpublic:// 直接写扩容和赋值逻辑// 扩容...
2026-04-10 11:16:13
540
11
原创 【C++内存管理】一文搞定new/delete:从入门到拿捏~
这是new/delete相比自动调用构造和析构函数。我们定义一个测试类Aclass Apublic://构造函数:_a1(a1), _a2(a2)//拷贝构造//赋值运算符if (this!= &aa)~A()private:调用函数申请空间在申请的空间上执行构造函数,完成对象的构造在空间上执行析构函数,完成对象中资源的清理工作调用函数释放对象的空间new T[N]的原理调用函数,在中实际调用函数完成N个对象空间的申请。
2026-04-09 13:28:12
519
4
原创 【C++类和对象(六)】一文讲透内部类,匿名对象,编译器优化!
内部类,顾名思义,就是定义在另一个类内部的类。public:{ // Inner 就是 Outer 的内部类// ...A aa1(10);// 有名对象,对象名叫 aa1如果你写A(10)这样的代码,它会创建一个没有名字的对象,这就是匿名对象。A(10);// 匿名对象,没有对象名直接用类名加实参,不需要给对象起名字。今天的内容到这里就结束了,希望你能有所收获~代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-04-06 20:13:40
461
2
原创 【C++类和对象(五)】一篇文章带你搞定:初始化列表,类型转换,static成员,友元
优先使用初始化列表无论是否显示写初始化列表,每个构造函数都有初始化列表;无论是否在初始化列表显示初始化成员变量,每个成员变量都要走初始化列表初始化;初始化能保证成员在进入构造函数体之前就正确初始化,避免先默认构造再赋值的浪费,特别是对于没有默认构造函数的成员,这是唯一的选择。牢记必须放在初始化列表的成员const成员引用成员没有默认构造函数的类类型成员利用 C++11 类内缺省值。
2026-04-06 13:23:30
662
8
原创 【C++类和对象(四)】手撕 Date 类:赋值运算符重载 + 日期计算
今天的内容到这里就结束了,希望你能有所收获~代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-04-01 20:42:20
553
7
原创 【C++类和对象(三)】别再死记!拷贝构造与运算符重载保姆级讲解!
燃尽了_(:ᗤ」ㄥ)_累瘫,赋值运算符重载就放到下篇文里讲叭~代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-04-01 13:33:05
474
原创 【C++类和对象(二)】构造函数和析构函数没学懂?保姆级教程在此!
今天的内容到这里就结束了,希望你能有所收获~代码无bug,学习不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-03-28 20:26:31
559
10
原创 【C++类和对象(一)】类的定义,实例化,this指针超详细讲解!
class 类名// 访问限定符public:// 公有成员private:// 私有成员protected:// 保护成员// 注意分号class为定义类的关键字,C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是struct中可以定义函数,一般情况下我们还是推荐用class定义类。类名遵循标识符命名规则(字母、数字、下划线,不能以数字开头通常习惯首字母大写,便于区分变量名。类体由花括号{ }包围。
2026-03-28 15:31:53
394
1
原创 【C++入门指南(下篇)】引用、inline、nullptr 超详细讲解!
引用就是给一个已经存在的变量起一个别名。引用本身不占用额外内存(从概念上讲),它和原变量共享同一块内存空间。对引用的任何操作,本质上都是在操作原变量。类型& 引用别名 = 引用对象int main()int a = 1;//这里的b和c是a的别名int& b = a;int& c = a;//这里给b取别名,d相当于还是a的别名int& d = b;//如果打印它们的地址的的话,你会神奇的发现//它们是一样的!return 0;C++ 就是这样一门语言——
2026-03-23 17:18:22
430
4
原创 【C++入门指南(上篇)】内含命名空间、缺省参数、函数重载、内联函数等超详细讲解!
定义命名空间使用关键字namespace,后跟命名空间的名字,然后是一对大括号{ }(注意大括号外没有分号!),里面可以包含变量、函数、类、结构体、甚至另一个命名空间。namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量。命名空间只能在全局作用域或其他命名空间内定义,不能在函数内定义。项目工程中多文件中定义的同名namespace会认为是一个namespace,不会冲突.C++标准库都放在一个叫的命名空间中。int main()
2026-03-21 15:23:06
411
5
原创 【C语言指针探索2】从数组名到二级指针的奇幻冒险
希望下次当你看到**pp时,不再害怕,而是会心一笑:“小样,不就是指针的指针嘛!现在,带着你的指针去征服世界吧!记得给野指针拴好绳子,别让它们到处乱跑!代码无bug,指针不迷路,我们下篇再见!(•̀ᴗ•́)و。
2026-01-30 12:09:55
858
2
原创 【C语言指针探索1】你的内存“寻宝图”
指针变量是一种特殊类型的变量,专门用于存储内存地址指向无效内存地址的指针。// 野指针的三种产生方式// 类型1:未初始化的指针int* p1;// 野指针!值是随机的// 危险:可能崩溃或破坏数据// 类型2:已释放内存的指针*p2 = 100;free(p2);// 释放内存// 此时p2成为野指针,指向的内存已归还系统// 危险:访问已释放内存// 类型3:局部变量的指针(超出作用域)// 将指针p3指向局部变量local_var的地址。} // 代码块结束!
2026-01-22 22:53:41
757
1
原创 【C语言函数递归指南】如何优雅的“套娃”而不翻车
简单来说,递归就是函数自己调用自己。没错,就像照镜子时镜子里又有一面镜子,理论上可以无限延伸下去(但在编程中我们可不敢真的无限延伸)。用稍微正式一点的话说:递归是一种通过将问题分解为更小的相同问题来解决问题的方法。递归中的递就是递推的意思,归就是回归的意思下面看一个会让你电脑“崩溃”的例子!int main()printf("我要调用自己了...\n");main();// 看,它真的这么做了!return 0;如果你真的运行这个函数,结局就是:栈溢出。就像往杯子里倒水不停下,水总会溢出来。
2025-12-19 21:18:01
894
1
原创 【C语言函数完全指南】从使用到创造你的代码工具
当现成的工具不够用时,就该创造你自己的“独家厨具”了!在电影上映前,你会看预告片了解基本信息。函数的声明就像预告片,定义则是完整电影。简单来说,函数就是你编程世界里的预制工具包和独家配方。它让代码从一堆杂乱指令,变成了有组织、可协作的精密系统。编程如烹饪,理论看了千遍,不如亲手点火一试。真正的掌握,永远发生在你动手将想法变为代码的那一刻!编程如修行,顿悟常在编译失败后(•̀ᴗ•́)و。
2025-12-06 00:28:21
811
原创 【C语言数组】从“单间”到“豪宅”的升级指南
同数据类型——大家都是自己人连续存储——内存中的连体婴下标从0起——数数得从“零”开始输入用循环——配合scanf和输出用循环——配合printf格式化二维要嵌套——先行后列遍历数组成就已解锁!下一关:函数!温馨提示:本游戏没有存档功能,但多写代码可以积攒经验值。(•̀ᴗ•́)و。
2025-11-29 23:33:09
839
原创 分支与循环【下篇】:程序员的“复读机”生存指南——while/for/do while
谨慎的守卫,先检查再行动有条理的管家,一切尽在掌控冲动的冒险家,先做再说紧急刹车,立即停止跳过当前,继续前进俄罗斯套娃,层层深入任意门,谨慎使用循环就像生活中的习惯——好的循环让代码优雅高效,坏的循环会让程序陷入无尽的深渊!生活就像while循环里的continue——可以跳过挫折,但别跳过成长!记得给自己‘i++’!(•̀ᴗ•́)و。
2025-11-22 21:29:31
1324
1
原创 分支与循环【上篇】:程序员的“选择困难症”完全指南——if/else 与 switch 详解
有没有觉得,程序有时候傻得可爱?你让它往东,它绝不往西,但你得把“如果往东的路封了,那就看看能不能往西”这种话,掰开了揉碎了喂给它。今天咱们要聊的 if, else, 以及switch,就是教你怎么把“人话”翻译成“机话”的语法。学完它们,你就能让电脑变得“懂事”一点。
2025-11-14 23:30:49
1738
原创 【C语言动物园】数据类型与转义字符:程序员的“动物世界“大冒险!
嘿,新来的动物园管理员!欢迎来到C语言动物园!我是你的饲养员导师"码小喵"。(各种体型的动物)和(会变身的魔法生物)。准备好你的饲养手册,我们开始吧!
2025-11-09 20:39:09
1247
1
原创 【C语言入门记:主角main函数和他的左膀右臂】
main 函数:程序霸道总裁,一切行动听他指挥;printf 函数:总裁的嘴巴,负责对外喊话(输出);scanf 函数:总裁的耳朵,负责听取指令(输入),但记性不好,老要问地址(&);库函数和#include:总裁背后的"工具天团"和租凭合同,没有合同,明星们(printf/scanf)就拒绝工作。希望这篇带点小幽默的讲解,能让你有所收获~千里之行,始于main()函数。加油,未来的代码诗人,世界的构建师!你的冒险,才刚刚开始。•̀ᴗ•́)و。
2025-11-07 20:51:37
1292
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅