C++之菜鸟的沉沦
文章平均质量分 74
C++入城门到入宅门到入院门到入前门到入后门.......
David猪大卫
嗨咯,朋友们,让我们一起交流学技术......
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++修炼】二叉搜索树
本文系统介绍了二叉搜索树(BST)的核心概念、基本操作与实现。首先阐述了BST的定义与性质,分析了其最优(O(logN))与最差(O(N))情况下的性能。随后详细讲解了BST的插入、查找与删除算法,并提供了完整的C++代码实现。文章进一步探讨了BST的两种典型应用场景:仅用于判断元素是否存在的key搜索,以及可存储键值对并支持值修改的key/value搜索,并通过英译中字典和词频统计实例加以说明。最后,针对动态内存管理,深入讨论了BST的拷贝构造、析构及赋值运算符重载等关键问题。全文结合图示与代码示例,旨在原创 2026-11-05 11:49:44 · 297 阅读 · 0 评论 -
【C++修炼】面向对象—多态
文章摘要 多态是面向对象编程的核心特性,分为静态多态(如函数重载、模板)和动态多态(运行时多态)。动态多态通过虚函数和继承实现,需满足两个条件:1. 被调用的函数是虚函数且子类完成重写;2. 通过父类指针或引用调用虚函数。虚函数表(vtable)存储虚函数地址,对象通过虚表指针访问对应函数,实现运行时动态绑定。纯虚函数(=0)定义抽象类,强制子类重写。析构函数需声明为虚函数以确保正确释放资源。C++11引入override和final关键字增强多态安全性。多态原理涉及虚表机制,虚表通常存储在常量区,通过动态原创 2026-11-02 16:48:47 · 255 阅读 · 0 评论 -
【C++修炼】STL容器—stack与queue
本文系统介绍了C++中的栈(stack)与队列(queue)两种容器适配器。主要内容包括:1. 基本概念:栈遵循LIFO原则,队列遵循FIFO原则,均属于容器适配器而非独立容器,默认基于deque实现;2. 应用实例:通过LeetCode等OJ题目(如最小栈、栈序列验证、用栈实现队列、二叉树层序遍历)演示实际使用方法;3. 底层实现:详细解析适配器模式原理,说明如何基于vector/list等容器实现stack和queue,分析deque作为默认容器的优缺点;4. 扩展内容:介绍优先队列(priority_原创 2026-10-27 21:33:02 · 372 阅读 · 0 评论 -
【C++修炼】STL容器—list
本文详细介绍了C++ STL中的list容器,包括其底层实现、使用方法及模拟实现。list基于双向循环链表,支持高效插入/删除但不支持随机访问。文章涵盖了list的构造函数、容量操作、元素访问、迭代器分类、修改操作及特定算法(如reverse、sort、merge等),并通过代码示例展示了实际应用。最后通过性能测试对比了list::sort和std::sort的效率差异,并提供了list核心接口的模拟实现代码,包括结点类、迭代器类和list类模板的实现。原创 2026-10-19 09:35:42 · 357 阅读 · 0 评论 -
【C++修炼】STL容器—vector
本文系统介绍了C++ STL中的vector容器,主要内容包括: vector是顺序表容器,底层采用动态数组实现,支持任意类型元素存储; 详细讲解了vector的构造方式(默认构造、填充构造、区间构造、拷贝构造)和常用操作(插入删除、遍历访问、扩容机制); 重点分析了vector的迭代器实现原理及迭代器失效问题,提出了解决方案; 深入探讨了vector的深拷贝问题及解决方法; 完整模拟实现了vector的核心功能,包括构造函数、析构函数、扩容机制等。 文章通过大量代码示例展示了vector的实际应用,比较了原创 2026-10-19 09:35:23 · 122 阅读 · 0 评论 -
【C++修炼】string类:string类的模拟实现
本文实现了一个简化版的string类,模拟STL中string的基本功能。主要包含以下内容: 核心数据结构:使用char*动态数组存储字符串,配合_size和_capacity记录长度和容量 基础功能实现: 默认构造、拷贝构造、赋值重载和析构函数 迭代器支持(begin/end) 容量相关接口(size/capacity/reserve等) 元素访问([]运算符重载) 字符串操作: 修改接口(push_back/append/insert/erase等) 查找和子串操作(find/substr) 流操作(&原创 2026-10-16 20:51:17 · 173 阅读 · 0 评论 -
【C++修炼】STL容器—模板进阶:非类型模板参数、模板特化、模板分离编译
本文主要讲解了C++模板中的非类型模板参数和模板特化两大核心概念。 非类型模板参数 分为类型形参和非类型形参 非类型形参可作为常量使用,常用于定义数组大小 必须是整型且编译期确定的常量 示例展示了静态数组array的实现原理 模板特化 函数模板特化:针对特殊类型定制实现,但存在匹配问题 类模板特化:包括全特化和偏特化 偏特化可对参数类型进行进一步限制(指针/引用等) 推荐使用重载代替函数模板特化 模板分离编译问题 解释了模板分离编译导致链接失败的原因 提供了显式实例化和定义放头文件两种解决方案 文章通过大量原创 2026-10-16 20:49:56 · 385 阅读 · 0 评论 -
【C++修炼】string类:std标准库的string类
本文主要介绍了C++标准库中的string类及其常用接口。string类封装了字符串操作,相比C语言的字符串处理更安全高效。文章详细讲解了string类的构造函数、元素访问方法(如[]运算符、迭代器)、容量相关接口(size/capacity/resize)、修改接口(append/replace/erase)以及查找操作(find/rfind)等。同时介绍了auto关键字和范围for循环等C++11特性,这些特性与string类配合使用能提高代码简洁性。string类通过动态内存管理和丰富的成员函数,为字原创 2026-10-16 20:50:35 · 248 阅读 · 0 评论 -
【C++修炼】模板初阶:泛型编程、函数模板、类模板
本文介绍了C++模板编程的基础知识,主要包括函数模板和类模板的使用。函数模板通过类型参数实现代码复用,支持隐式和显式实例化,编译器会根据实参类型自动生成具体函数。类模板必须显式实例化,通过指定类型参数生成具体类。文章详细讲解了模板的定义格式、实例化过程、参数匹配原则等核心概念,并通过多个代码示例演示了模板的实际应用,包括交换函数、加法函数和栈类的实现。模板编程是C++泛型编程的基础,能够显著提高代码复用率和可维护性。原创 2026-10-15 09:16:59 · 71 阅读 · 0 评论 -
【C++修炼】C/C++内存分布与管理:new、delete、malloc、free
本文系统介绍了C/C++内存管理机制。主要内容包括:1. 内存分布模型(栈、堆、数据段、代码段等)及各区域特性;2. C语言动态内存管理函数(malloc/calloc/realloc/free)的使用方法;3. C++内存管理操作符(new/delete)的特点及其与malloc/free的区别;4. operator new/delete函数的底层实现原理;5. new/delete操作符的实现机制;6. 定位new表达式的使用场景;7. 使用注意事项和常见问题分析。重点阐述了new/delete在底层原创 2026-10-15 09:16:19 · 817 阅读 · 0 评论 -
【C++修炼】类和对象(下):再探构造、类型转换、友元函数、static成员、内部类、匿名对象
本文深入探讨了C++类和对象的高级特性,主要包括:1. 构造函数初始化列表的使用及注意事项;2. 类型转换的实现方式及其优化;3. static成员的特性和应用场景;4. 友元函数和友元类的定义及使用;5. 内部类的概念和特性;6. 匿名对象的定义和使用场景。通过代码示例详细演示了各特性的具体实现,分析了成员变量的声明、定义与初始化关系,比较了初始化列表与函数体内赋值的区别,并探讨了编译器优化、访问权限控制等关键问题。原创 2026-10-15 09:13:37 · 121 阅读 · 0 评论 -
【C++修炼】类和对象(中):六大默认成员函数
本文深入讲解了C++类和对象的默认成员函数,重点包括构造函数、析构函数、拷贝构造函数和赋值运算符重载。主要内容如下: 构造函数:用于对象初始化,具有自动调用、重载、默认构造等特点。编译器生成的默认构造函数对内置类型不做初始化,需显式实现以满足需求。 析构函数:负责资源清理,对象销毁时自动调用。默认析构函数对内置类型不做处理,自定义类型会调用其析构函数。有资源申请的类必须显式实现析构。 拷贝构造函数:用于对象拷贝初始化,必须使用引用传参以避免无限递归。默认拷贝构造实现浅拷贝,有资源申请的类需实现深拷贝。 运算原创 2026-10-15 09:13:18 · 303 阅读 · 0 评论 -
【C++修炼】类和对象(上):初识类和对象、this指针
本文系统介绍了C++中类和对象的核心概念。主要内容包括:1. 类与对象的定义:类作为用户自定义类型,通过封装成员变量和方法实现数据与行为的绑定;2. 访问控制:通过public、private等限定符实现封装;3. 内存管理:对象仅存储成员变量,成员函数存放在代码段;4. this指针:编译器隐式添加的指针参数,用于区分不同对象调用相同方法;5. 类域与命名空间:类定义了新的作用域,影响编译查找规则。文章通过对比C语言结构体实现栈和C++类实现栈的案例,展示了面向对象编程在封装性、安全性等方面的优势,为理解原创 2026-10-15 09:12:50 · 173 阅读 · 0 评论 -
【C++修炼】哈希表的实现
本文系统讲解哈希表的实现原理与代码实践。首先介绍哈希的概念,说明其本质是关键字到存储位置的映射关系;随后讲解直接定址法及其适用场景。接着引入哈希表,分析哈希冲突与负载因子的权衡,并介绍除法散列法、乘法散列法和全域散列法三种哈希函数。针对哈希冲突,重点讲解开放定址法(线性探测、二次探测、双重探测)与链地址法两种解决方案,并给出完整的 C++ 代码实现,涵盖插入、扩容、查找、删除以及字符串等非整型关键字的转换处理。原创 2026-09-12 11:53:32 · 464 阅读 · 0 评论 -
【C++修炼】Myunordered_map/Myunordered_set 封装哈希表
本文围绕 C++ 标准库中 unordered_map/unordered_set 的底层实现展开。首先分析 SGI-STL30 版本中 hash_map/hash_set 的源码框架,理解哈希表 hashtable 如何通过泛型编程同时支持单键和键值对结构;随后模拟实现 unordered_map/unordered_set,重点讲解框架搭建、insert 插入、迭代器 iterator 的实现思路,并给出完整可运行的代码,帮助读者掌握哈希表容器的底层原理与封装技巧。原创 2026-09-12 11:53:11 · 182 阅读 · 0 评论 -
【C++修炼】面向对象—继承
本文深入讲解了面向对象编程中的继承机制,主要涵盖以下内容: 继承基础 继承是面向对象三大特性之一,允许子类复用父类特性并扩展新功能 三种继承方式(public/protected/private)及其访问权限变化规则 继承与类模板的对比,展示不同层次的代码复用方式 继承关键问题 父子类对象赋值兼容规则(切片原则) 继承体系中的作用域与名称隐藏规则 子类默认成员函数(构造/析构/拷贝/赋值)的实现要点 虚继承解决菱形继承的数据冗余和二义性问题 设计实践 继承与组合的对比:is-a关系优先继承,has-a关系优原创 2026-09-10 20:20:12 · 473 阅读 · 0 评论 -
【C++修炼】C++11
本文系统梳理C++11引入的现代C++核心特性,涵盖列表初始化、右值引用与移动语义、可变参数模板、lambda表达式、类的新功能、STL新变化以及包装器等七大主题。文章从列表初始化统一初始化方式讲起,深入剖析initializer_list的底层机制;随后重点讲解右值引用如何通过移动构造与移动赋值解决传值返回的拷贝问题,并延伸至引用折叠、完美转发等进阶内容。可变参数模板部分介绍参数包与包扩展的编译期展开原理,lambda部分则从语法、捕捉列表到底层仿函数实现层层递进。此外还涉及默认成员函数扩展、defaul原创 2026-09-10 20:19:36 · 46 阅读 · 0 评论 -
【C++修炼】异常
本文系统讲解C++异常处理机制,涵盖异常的概念、抛出与捕获、栈展开、匹配规则、重新抛出、异常安全及异常规范,并介绍标准库异常体系。通过多个代码示例,展示如何利用throw和catch实现错误传递与统一处理,以及大型项目中基于异常基类设计自定义异常体系、使用catch(...)兜底保障的实践方法。原创 2026-09-09 19:47:54 · 219 阅读 · 0 评论 -
【C++修炼】智能指针使用及原理
本文深入剖析C++智能指针的设计原理与使用场景。文章从手动管理内存的痛点出发,引出RAII资源管理思想,并系统讲解C++标准库中auto_ptr、unique_ptr、shared_ptr和weak_ptr四种智能指针的特点与适用场景。通过模拟实现,揭示auto_ptr的管理权转移、unique_ptr的独占所有权以及shared_ptr基于引用计数的共享管理机制。针对shared_ptr的循环引用问题,详细阐述weak_ptr的弱引用解决方案;同时分析shared_ptr引用计数的线程安全问题及原子化处理原创 2026-09-09 19:47:20 · 197 阅读 · 0 评论 -
【C++修炼】初识C++:命名空间、缺省参数、函数重载、引用、内联函数、指针空值
本文摘要:C++基础语法特性解析 本文系统介绍了C++的六个核心语法特性: 命名空间:解决名称冲突问题,通过namespace定义,支持嵌套和跨文件合并 缺省参数:函数参数默认值,分为全缺省和半缺省(必须从右往左) 函数重载:同名函数通过参数类型/数量/顺序区分,实现类似功能 引用:变量的别名,与指针相比更安全但不可更改引用对象 内联函数:inline修饰避免函数调用开销,适合短小频繁调用的函数 nullptr:C++11引入的空指针常量,替代NULL避免二义性 这些特性共同构成了C++区别于C语言的重要语原创 2024-10-25 14:49:51 · 1409 阅读 · 0 评论
分享