手把手教你学会C++
文章平均质量分 97
理论 + 实战 + 避坑指南——手把手带你从 C++ 小白到能写出工业级代码的工程师
say_fall
与君共赴,万里征途
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
红黑树底层原理全解析:从 5 大性质到 STL 容器底层实现
本文介绍了红黑树的基本概念、性质及其实现原理。红黑树是一种自平衡二叉搜索树,通过颜色约束和旋转操作保持近似平衡,确保查找、插入和删除操作的时间复杂度为O(logN)。文章详细解析了红黑树的五大性质、节点结构设计,重点讲解了左旋和右旋两种基本操作,并深入分析了插入操作的四种调整情况。红黑树因其高效的平衡性能,被广泛应用于STL容器和Linux内核等核心系统中。原创 2026-04-22 19:56:34 · 720 阅读 · 36 评论 -
C++ 仿函数的神级应用:一套红黑树代码完成 set 与 map 双容器封装
本文深入探讨了如何设计一个通用的红黑树模板,使其能够同时适配STL中的set和map容器。文章首先分析了set和map在数据存储上的差异(set只存储key,map存储键值对),提出通过仿函数KeyOfT统一提取key的方式。随后详细介绍了红黑树节点和迭代器的设计,重点讲解了迭代器的++和--操作实现原理,特别是处理中序遍历的前驱和后继节点查找。最后展示了Insert方法的改造,通过模板参数和仿函数实现一套代码支持两种容器的关键技术点。全文以清晰的代码示例和图示,系统性地解决了红黑树通用化设计的核心问题。原创 2026-04-22 19:56:04 · 619 阅读 · 22 评论 -
干货预警|C++ STL set/map 系列超详细教程,新手也能看懂
本文全面介绍了C++ STL中的关联式容器set、multiset、map和multimap的核心使用方法。重点讲解了set容器的去重有序特性、迭代器遍历与插入操作,详细解析了find和erase操作的区别与注意事项,特别强调了lower_bound和upper_bound的区间操作技巧。针对multiset,着重说明了其值冗余特性以及与set的主要差异。文章通过完整代码示例,帮助读者从基础到进阶掌握这些容器的核心接口使用,是学习C++ STL关联容器的实用指南。原创 2026-04-17 10:59:36 · 534 阅读 · 23 评论 -
深入理解AVL树:平衡调整机制与性能优化实战
AVL树通过这种平衡机制,保证了查找、插入和删除操作的时间复杂度都为O(log n),是一种高效的数据结构。原创 2026-04-17 10:59:08 · 649 阅读 · 27 评论 -
搞懂 set 底层不用死记硬背:二叉搜索树手把手实现教程
本文介绍了C++中set容器的底层实现原理,重点讲解了二叉搜索树的结构特性及其在set中的应用。文章首先阐述了set的核心特性(自动排序和元素唯一性),然后深入分析了二叉搜索树的插入、查找、删除等基本操作,特别针对删除操作中的复杂情况(如节点有两个子节点时)提出了替换法解决方案。通过从基础功能入手逐步构建完整set容器的实践方式,帮助开发者更好地理解标准库设计思想,掌握数据结构底层实现逻辑。文中配有示意图和代码示例,适合希望深入理解STL容器实现原理的中高级C++开发者阅读。原创 2026-04-13 21:18:30 · 504 阅读 · 11 评论 -
面试官最爱问:C++ 多态底层到底是怎么实现的?
本文深入解析C++多态的实现原理,重点探讨虚函数表机制。通过示例说明带有虚函数的类会在对象内存中增加虚表指针(vptr),导致sizeof结果增大。文章详细分析了多态的动态绑定过程:运行时通过虚表查找对应函数地址,实现基类指针调用不同派生类函数的功能。同时对比了静态绑定与动态绑定的区别,并解释了虚函数表的组成结构(包含基类虚函数、派生类重写函数及新增虚函数)。最后通过内存地址验证了虚函数表通常存放在代码段(常量区)的特性,全面揭示了多态背后的运行时机制。原创 2026-03-17 16:42:02 · 851 阅读 · 34 评论 -
多态核心:虚函数、override、final、纯虚函数总结
本文介绍了C++多态的核心概念与应用。多态分为编译时多态(函数重载/模板)和运行时多态(虚函数机制),重点讲解了运行时多态的实现方式。通过动物叫声、购票优惠等生动示例,阐述了多态"一个接口,多种实现"的特性。文章详细解析了多态的构成条件:必须通过基类指针/引用调用虚函数,且派生类需完成虚函数重写。通过典型代码示例展示了虚函数定义、重写规范及多态调用方式,并深入分析了一道考察多态原理的面试题,帮助读者理解虚函数参数继承等易错点。原创 2026-03-02 22:25:09 · 1343 阅读 · 43 评论 -
同名成员到底调用谁?C++ 隐藏规则你真的会吗?
本文介绍了C++面向对象编程中的继承特性。首先通过Student和Teacher类的冗余代码示例,展示了继承如何实现代码复用。接着详细讲解了继承的定义格式、三种继承方式(public/protected/private)及其访问规则变化,重点强调实际开发中应优先使用public继承。文章还演示了继承类模板的实现方法,并以stack为例比较了继承与组合的不同实现方式。最后解释了基类和派生类之间的转换规则,通过"父子关系"类比说明派生类可赋值给基类(切片),而基类不能直接赋值给派生类。原创 2026-03-01 21:32:32 · 699 阅读 · 19 评论 -
虚继承到底是什么?能彻底解决菱形继承的问题吗?
本文深入探讨了C++继承中的核心难点与常见误区。主要内容包括:1)不可继承类的两种实现方法(构造函数私有化和final关键字);2)继承下友元关系的不可继承特性;3)静态成员在继承体系中的唯一性;4)多继承引发的菱形继承问题及其解决方案(虚继承)。文章通过代码示例详细分析了各类继承场景,指出多继承可能带来的复杂性,建议避免设计菱形继承结构,并比较了不同继承方式的适用场景。最后强调合理选择继承与组合关系的重要性。原创 2026-03-01 21:31:07 · 618 阅读 · 20 评论 -
从踩坑到封神:C++ string 类的构造、迭代器与容量管理终极指南(二)
在 C++ 编程中,是处理字符串最核心、最便捷的工具,它封装了 C 风格字符数组的诸多痛点(如手动管理内存、固定长度限制等),并提供了丰富的成员函数和非成员函数来简化字符串操作。掌握string类的常用函数,是高效处理文本解析、字符串拼接 / 查找 / 比较、子串提取等场景的关键。本文将继续聚焦string类的字符串运算相关成员函数(如c_str()find()substr()等)和核心非成员函数(如getline()operator+原创 2026-01-13 21:18:54 · 1088 阅读 · 20 评论 -
从踩坑到封神:C++ string 类的构造、迭代器与容量管理终极指南(一)
本文介绍了C++标准模板库(STL)中的核心组件及其功能,重点讲解了string类的基本用法。STL包含容器、算法、迭代器等六大组件,其中string作为封装完善的字符串类,提供了丰富的操作方法。文章详细对比了四种字符类型(char/wchar_t/char16_t/char32_t)的特性及适用场景,并通过代码示例展示了string的多种构造函数,包括无参构造、拷贝构造和范围拷贝构造等。string类的引入解决了C语言字符串处理的局限性,使字符串操作更安全便捷。原创 2026-01-13 20:45:00 · 914 阅读 · 25 评论 -
泛型编程基石:C++ 模板从入门到熟练
本文介绍了C++模板编程的核心概念,重点讲解了函数模板和类模板的使用方法。函数模板通过泛型编程实现代码复用,支持隐式和显式实例化,解决了不同类型数据需要重复编写相同逻辑的问题。类模板则通过模板参数定义通用类结构,使用时需显式指定类型参数进行实例化。文章还分析了模板函数与非模板函数的匹配原则,以及模板参数的使用规范,帮助开发者理解如何利用模板提升C++代码的通用性和复用性。原创 2026-01-12 09:45:00 · 835 阅读 · 21 评论 -
为什么 new [] 搭配 delete 会崩溃?C++ 内存管理底层揭秘
C++内存管理:new与delete详解 摘要:本文介绍了C++与C语言在内存管理上的核心区别,重点讲解了C++特有的new和delete操作符。文章首先分析了虚拟内存空间的分区结构,通过代码示例展示了不同类型变量的存储位置。然后对比了C语言的malloc/realloc/calloc/free函数与C++的new/delete操作符,特别强调了new/delete对自定义类型的关键优势:在分配/释放内存时会自动调用构造函数和析构函数,这是与C语言内存管理函数的本质区别。原创 2026-01-12 09:30:00 · 1540 阅读 · 1 评论 -
C++ 类与对象易错点:初始化列表顺序 / 静态成员访问 / 隐式类型转换
本文介绍了C++中构造函数的初始化列表、类型转换和static成员三个核心知识点。初始化列表是成员变量定义的地方,const成员、引用成员和无默认构造的自定义类型必须在初始化列表显式初始化。类型转换部分讲解了内置类型与类类型的隐式转换规则及explicit关键字的作用。static成员包括静态变量和静态函数,静态变量必须在类外初始化,静态函数没有this指针,只能访问静态成员。文章通过代码示例详细说明了这些特性的使用方法和注意事项,帮助读者掌握C++面向对象编程的重要概念。原创 2026-01-08 17:01:48 · 1011 阅读 · 3 评论 -
零基础吃透 C++ 类默认成员函数:万字核心知识点汇总
本文系统介绍了C++类中六大默认成员函数的核心知识点。首先阐述了构造函数的特点与使用规则,包括无参构造、带参构造和全缺省构造的区别;其次讲解了析构函数的资源释放机制及自动调用特性;然后深入剖析拷贝构造函数的引用传参必要性,避免无限递归问题;最后通过日期类实例演示了运算符重载的实现方法。文章强调编译器自动生成的默认函数与手动实现的差异,帮助开发者理解何时需要自定义这些函数,并提供了完整的代码示例辅助理解。原创 2025-12-27 14:31:24 · 825 阅读 · 0 评论 -
赋值运算符重载为什么必须定义为类的成员函数
本文探讨了C++中赋值运算符重载必须定义为类成员函数的原因。核心在于语法强制规定和语义匹配需求:1)C++标准明确要求;2)成员函数的this指针天然绑定左值对象,符合修改语义;3)支持连续赋值等特性;4)保持与默认赋值运算符行为一致。相比加减等运算符,赋值具有"修改自身"的特殊语义,必须由对象自身管理。全文通过代码示例和语义分析,清晰阐释了这一语法规则背后的设计逻辑。原创 2025-12-27 14:31:19 · 755 阅读 · 0 评论 -
C++类和对象深度解析:定义、内存布局和this指针
本文系统讲解了C++中类与对象的核心概念。首先介绍了类的定义格式,包括class关键字的使用、访问限定符(public/protected/private)以及类域的概念。其次详细阐述了对象实例化过程,分析了对象内存大小计算规则(遵循结构体内存对齐原则),并解释了空类的特殊情况。最后深入探讨了this指针的底层原理,说明它是编译器隐式添加的指向当前对象的指针,是成员函数访问成员变量的关键机制。通过Date类等示例代码,帮助读者理解从类定义到对象实例化的完整流程,以及面向对象编程中封装特性的实现原理。原创 2025-12-18 09:00:00 · 996 阅读 · 2 评论 -
新手避坑指南:C++ 引用、内联函数与 nullptr 全解析
本文深入解析C++三大核心特性:引用、内联函数与nullptr。引用作为变量别名,需注意初始化规则和const权限控制;内联函数通过减少栈帧开销优化性能,但需权衡代码膨胀问题;nullptr作为类型安全的空指针替代NULL,避免隐式类型转换问题。文章通过代码示例详细说明各特性的正确使用场景与注意事项,帮助开发者规避常见陷阱,提升代码质量与性能。原创 2025-12-11 09:38:56 · 963 阅读 · 25 评论 -
C++ 入门第一课:命名空间、IO 流、缺省参数与函数重载全解析
本文介绍了C++与C语言的基础差异,重点讲解了四个核心概念:命名空间用于解决多人协作时的命名冲突问题;C++输入输出流简化了I/O操作并支持自动类型识别;缺省参数为函数参数提供默认值;函数重载允许同名函数通过不同参数列表实现多态。这些特性共同构成了C++相较于C语言的基础优势,为后续深入学习奠定基础。文章还提供了相关代码示例和使用注意事项。原创 2025-12-07 16:04:10 · 1185 阅读 · 9 评论
分享