- 博客(317)
- 收藏
- 关注
原创 12--揭秘C++多态:从原理到实战
本文系统讲解了C++多态的核心概念与实现原理。首先阐述了多态的定义:通过继承关系、虚函数重写和父类指针/引用调用来实现同一函数调用产生不同行为。重点分析了多态的实现条件,包括虚函数重写规则、协变、析构函数重写等特殊情况,并介绍了C++11的override和final关键字。深入探讨了多态原理,包括虚函数表机制、单继承/多继承下的对象模型、虚表存储位置等底层实现细节。通过代码示例验证了虚函数表的工作原理,对比了普通调用与多态调用的区别。最后讲解了抽象类概念及其与接口继承的关系,并解答了多态相关的常见面试问题
2025-08-20 12:38:39
623
原创 11--C++继承与封装核心解析
文章摘要: 本文系统性地讲解了C++继承机制的核心概念与应用。首先阐述了封装的概念及实现方式,包括访问限定符的使用。其次详细介绍了继承的定义、权限变化(public/protected/private继承)和父子类对象转换规则。文章重点分析了继承中的关键问题:作用域与隐藏现象、子类默认成员函数处理规则、友元关系与静态成员特性。针对多继承的复杂性,深入剖析了菱形继承问题及其解决方案——虚拟继承机制。最后对比了继承与组合的差异,指出继承适用于"is-a"关系而组合适用于"has-a
2025-08-20 12:33:43
971
原创 10--C++模板参数与特化详解
本文介绍了C++模板编程的核心概念与应用。主要内容包括:1)非类型模板参数原理,以array容器为例说明其实现与局限性;2)模板按需实例化机制,编译器只实例化实际使用的部分;3)模板特化的两种形式:全特化(针对具体类型)和半特化(对类型进行部分限制),通过日期类示例演示了函数和类模板特化的实现;4)模板分离编译问题及解决方案,建议将声明和定义放在同一文件;5)模板的优缺点分析,指出其提高了代码复用性但增加了编译时间。文章通过具体代码示例展示了模板在实际开发中的应用场景和注意事项。
2025-08-15 13:14:50
665
原创 01--基础算法(上): 高精度算法与经典模拟题解析
数据结构和算法排序算法:快速排序、归并排序、堆排序。搜索算法:二分查找、广度优先搜索(BFS)、深度优先搜索(DFS)。动态规划:背包问题、最长公共子序列(LCS)。图算法:Dijkstra算法、Floyd-Warshall算法、Prim算法。
2025-08-14 15:15:40
823
原创 09--解密栈与队列:数据结构核心原理
本文系统介绍了C++中的栈、队列、优先级队列及其相关实现技术。主要内容包括:1. 栈的特性、实现原理及不提供迭代器的原因;2. 双端队列deque作为适配器的优势及其内部实现;3. 队列与栈的异同点及队列模拟实现;4. 优先级队列(堆)的实现原理及仿函数应用;5. 反向迭代器的设计思路与实现方法。文章通过代码示例详细讲解了各数据结构的底层实现机制,包括容器适配器模式、deque的内部构造、优先级队列的调整算法等关键技术点。
2025-08-13 13:09:01
743
原创 08--深入解析C++ list:高效操作与实现原理
本文详细介绍了C++中的list容器及其模拟实现。主要内容包括:1. list概述:作为双向链表实现的序列容器,支持高效插入删除但缺乏随机访问能力;2. 接口实现:包括insert、splice、remove、unique、merge等操作,重点分析了迭代器失效问题;3. 模拟实现:详细讲解了双向链表节点设计、迭代器封装原理(通过类重载运算符控制指针行为)、const迭代器实现方案;4. 性能对比:通过实验数据展示了list排序相比vector的劣势,建议大数据量时转换为vector排序。文章通过大量代码示
2025-08-12 19:29:18
1156
原创 07--深入解析C++ vector底层机制
本文系统介绍了C++中vector容器的实现原理与使用细节。主要内容包括:1. vector基本特性:动态数组结构,支持自动扩容(1.5或2倍增长),提供resize/reserve等容量操作;2. 关键接口实现:分析insert/erase等操作的迭代器失效问题,以及深浅拷贝在扩容时的处理;3. 模拟实现要点:详细讲解构造函数重载、迭代器失效防护、深拷贝处理等核心问题;4. 典型应用场景:结合LeetCode题目展示位运算、杨辉三角等实际应用。文章通过大量代码示例和错误分析,深入剖析了vector的内部机
2025-08-11 09:09:05
777
原创 01 词法分析陷阱:C编程中的符号误解
本文探讨了编译器词法分析中的常见符号问题。重点分析了赋值运算符(=)与比较运算符(==)的混淆风险,位运算符(&,|)与逻辑运算符(&&,||)的区别,以及"贪心法"词法分析可能导致的歧义问题。同时讨论了整型常量的八进制表示陷阱、字符与字符串常量的区别,并通过实例说明这些语法特性可能导致的编程错误。最后提出了关于嵌套注释和词法分析器行为的思考题,强调了正确理解编译器词法规则的重要性。
2025-08-10 16:01:29
873
原创 06--string
本文摘要: C++中的string是一个表示字符序列的类,它通过动态内存管理解决了C语言固定字符数组的局限性。string提供多种字符编码支持(如wstring、u16string等)和丰富的接口操作,包括构造、遍历、容量管理、元素访问和修改等。文章详细解析了string在不同平台(VS和g++)下的实现差异,VS采用小字符串优化(SSO)策略,而g++使用写时拷贝技术。同时,文章对比了operator[]与at()的安全检查差异,并提供了string模拟实现的完整代码,包括构造、拷贝、迭代器、扩容等核心功
2025-08-09 15:25:50
815
原创 05--STL认识(了解)
STL(标准模板库)是C++标准库的重要组成部分,提供可复用的数据结构和算法框架。主要内容包括STL概念、版本、组成结构及学习路径:从基础认知到简化实现。STL与C++标准库关系密切,是高效编程的核心工具。参考资源推荐cplusplus.com和cppreference.com两个权威网站。学习建议从理解基础组件开始,逐步深入实现原理。
2025-08-08 22:39:46
227
原创 04--模板初阶(了解)
本文介绍了C++模板的基本概念和应用。模板作为泛型编程的基础,包括函数模板和类模板两类,实现了代码复用。函数模板通过隐式或显式实例化生成具体函数,遵循特定的匹配原则。类模板需要明确指定类型参数进行实例化。文章比较了模板与typedef的区别,指出模板在类型处理上的灵活性。同时强调了模板类定义与声明应放在同一文件的注意事项。模板的引入标志着C++进入了泛型编程时代,极大提升了代码复用性和开发效率。
2025-08-08 22:39:08
401
原创 03--内存管理
本文系统阐述了C/C++内存管理的核心概念和技术要点。首先分析了内存划分的必要性,详细说明了不同区域(栈区、堆区、静态区等)的特性及变量存储位置。重点对比了malloc/free与new/delete的异同,强调new/delete在简化语法、支持初始化和自动调用构造/析构函数等方面的优势。深入剖析了new/delete的底层实现机制,包括operator new/delete的工作流程。最后探讨了内存泄漏问题及其预防措施,并提供了链表模板的快速生成方法。全文从理论到实践,全面覆盖了C/C++内存管理的关键
2025-08-07 14:34:11
912
原创 01--CPP入门
本文摘要:C++引入了命名空间域解决符号冲突,支持指定访问和展开访问。介绍了输入输出(cout/cin)、缺省参数、函数重载(通过修饰函数名实现)和引用的特性与应用。分析了内联函数(提升效率但可能膨胀代码)和auto关键字(自动推导类型)的使用场景与注意事项。最后讨论了范围for循环和nullptr的优势。这些特性共同提升了C++的灵活性、安全性和效率,但也需注意合理使用以避免潜在问题。
2025-08-06 13:26:04
569
原创 02--类和对象
本文系统介绍了C++面向对象编程的核心概念与技术要点。主要内容包括:1)类与对象的定义与实现,重点讲解了构造函数、析构函数、拷贝构造等默认成员函数;2)封装特性与访问控制,通过访问限定符实现数据隐藏;3)this指针原理及其在成员函数中的应用;4)运算符重载的语法规则与实现方法;5)const成员函数的作用与权限控制;6)静态成员与友元机制的特殊应用场景;7)初始化列表的正确使用方法。文章通过日期类等具体案例,深入浅出地阐述了面向对象三大特性(封装、继承、多态)中的封装机制,为C++面向对象编程奠定了扎实基
2025-08-05 22:30:25
1078
原创 12-排序
本文介绍了6种经典排序算法的实现原理和代码实现:插入排序(将元素插入有序序列)、选择排序(选择最小元素交换位置)、冒泡排序(相邻元素比较交换)、堆排序(利用堆结构取最值)、快速排序(分治思想,荷兰国旗分区)和归并排序(分治+合并有序数组)。分析了各算法的时间复杂度:前三种为O(N²),后三种为O(NlogN)。其中堆排序需要额外空间,快速排序不稳定,而归并排序是稳定的。文章最后提供了洛谷P1177排序模板题的练习链接。每种算法都给出了清晰的C++实现代码,包含关键步骤注释。
2025-08-05 17:12:44
266
原创 11-哈希表
本文系统介绍了哈希表的概念、实现方法及应用。首先阐述了哈希表的基本原理,包括哈希函数设计(直接定值法、除留余数法等)和冲突处理方法(线性探测法、链地址法)。随后提供了C++实现代码,演示了两种冲突处理方式的具体实现。接着介绍了STL中的unordered_set和unordered_map容器,并比较了其与红黑树实现的set/map的区别。最后通过5个算法例题(P5266、P4305、P3879、P1102、P3405)展示了哈希表在实际问题中的应用,包括学籍管理、去重处理、词频统计、数对查找和城市统计等场
2025-08-05 17:12:07
321
原创 10-红黑树
本文系统介绍了三种重要的二叉搜索树结构及其应用。首先详细讲解了二叉搜索树的基本概念和增删改查操作,指出其在有序情况下会退化为链表的缺陷。然后引入平衡二叉树(AVL树),重点解析了四种旋转调整方式(LL、RR、LR、RL)和平衡因子的维护机制。最后介绍了红黑树的五大规则及其插入调整策略,说明其近似平衡的特性。文章还通过C++代码示例展示了STL中基于红黑树的set/map容器的使用,并提供了三个典型算法题解(词频统计、营业额计算、木材库存管理),演示了如何利用这些数据结构解决实际问题。全文从理论到实践,系统阐
2025-08-05 17:11:30
796
原创 09-堆
本文系统介绍了堆数据结构及其应用,主要内容包括:1.堆的定义与存储方式,重点讲解完全二叉树性质及顺序存储方法;2.堆的核心操作算法,包括向上调整和向下调整的详细实现;3.堆的模拟实现代码,包含插入、删除、查询等基本操作;4.STL中的priority_queue使用方法,涵盖内置类型和自定义结构体的实现;5.典型算法习题解析,包括堆排序、TopK问题、序列合并等实际应用场景,通过洛谷和牛客网的题目示例演示堆在算法竞赛中的灵活运用。全文通过代码实现和问题分析,完整展现了堆这一重要数据结构的理论知识和实践技巧。
2025-08-05 17:10:56
224
原创 08-二叉树
本文系统地介绍了二叉树的基本概念、存储方式和遍历算法。主要内容包括:1)二叉树的基本概念(普通二叉树、满二叉树、完全二叉树);2)数组和链式两种存储方式;3)深度优先遍历(前序、中序、后序)和广度优先遍历的实现;4)典型算法题目解析,包括构建二叉树、求树高/树宽、节点距离计算等。通过C++代码示例展示了各种遍历和计算方法的实现,并提供了多个OJ题目的解题思路和代码实现。文章可作为二叉树学习的实践指南,涵盖了从基础到应用的完整知识体系。
2025-08-05 17:10:04
316
原创 07-一般的树
本文介绍了树的基本概念和实现方法。主要内容包括:1)树的基本术语定义(结点度、树的高度、路径等)和分类(有序/无序树、有根/无根树);2)树的两种存储实现方式:vector数组和链式前向星;3)树的深度优先搜索(DFS)和广度优先搜索(BFS)遍历算法。文章通过代码示例展示了具体实现,并指出不同存储方式对遍历顺序的影响。这些内容为后续学习二叉树等树形数据结构奠定了基础。
2025-08-05 17:09:32
296
原创 06-队列
本文介绍了队列的概念、实现方式及应用。队列是一种先进先出(FIFO)的线性表,支持在队尾插入、队头删除操作。文章详细讲解了队列的数组模拟实现方法,包括入队、出队、查询等基本操作,并介绍了STL中的queue容器及其使用方法。通过三个算法例题(B3616队列模板、P1540机器翻译、P2058海港)展示了队列的实际应用场景。最后还拓展介绍了双端队列(deque)的概念和STL实现方式。全文内容涵盖队列的基础知识到实际应用,适合算法学习者参考。
2025-08-05 17:08:57
277
原创 05-栈 stack
本文介绍了栈的基本概念和实现方法。栈是一种后进先出(LIFO)的线性表,支持push(入栈)和pop(出栈)操作。文章详细讲解了用数组模拟栈的实现方法,包括入栈、出栈、查询栈顶等操作。同时介绍了C++ STL中的stack容器及其使用方法。最后提供了多个栈相关的算法例题及解析,包括栈的基本操作、括号匹配验证、后缀表达式计算等,展示了栈在实际问题中的应用。这些例题涵盖了栈的典型应用场景,帮助读者深入理解栈的工作原理和使用技巧。
2025-08-05 17:08:25
337
原创 04-链表
摘要:本文介绍了链表的基本概念和多种实现方式。链表通过节点(包含数据域和指针域)实现链式存储,包括静态数组模拟(使用两个数组分别存储数据和指针)和动态内存管理两种实现方式。详细展示了单链表和双链表的模拟实现代码,包括插入、删除、查找等基本操作。同时介绍了STL中的list容器及其使用方法。最后通过4个算法例题(排队顺序、单向链表、队列安排、约瑟夫问题)演示了链表在实际问题中的应用,涉及单链表、双链表和循环链表的操作技巧。
2025-08-05 17:07:29
411
原创 03-顺序表
本文介绍了顺序表的概念及实现方式。顺序表是线性表的顺序存储实现,分为静态分配(固定大小数组)和动态分配(可扩容数组)两种形式。文章详细展示了静态顺序表的模拟实现代码,包括插入、删除、查找等基本操作。同时介绍了STL中的动态顺序表vector,讲解其创建、遍历、增删改查等常用操作,并通过多个算法习题(如询问学号、寄包柜、移动零、合并有序数组等)演示了vector的实际应用。最后以UVA101积木问题为例,展示如何用vector数组解决复杂问题。全文通过代码实例帮助读者理解顺序表的原理与实现。
2025-08-05 17:06:51
328
原创 02-算法
算法是解决问题的步骤序列,能将输入转换为输出。评价算法优劣主要看时间复杂度和空间复杂度,分别表示执行时间和存储资源的消耗量级。大O表示法用于描述最坏情况下的复杂度,保留最高阶项并去除系数。递归算法的空间复杂度为单次递归空间乘以递归次数。竞赛中通常要求C++程序在1-2秒内完成,运算次数控制在10^7-10^8次,空间限制为128-256MB,可支持3*10^7个int或5000×5000的二维数组。
2025-08-05 17:06:12
178
原创 01-数据结构
数据结构是计算机存储和组织数据的方式,其核心意义在于提高数据处理效率。数据结构包含三大要素:一是逻辑结构,包括无关联的集合、一对一关系的线性结构、一对多的树形结构和多对多的图结构;二是存储结构,分为顺序存储(如数组)和链式存储(通过指针连接);三是数据运算,涉及数据的存储、增删改查等基本操作。这三大要素共同构成了数据结构的理论基础和实践框架。
2025-08-05 17:05:23
256
数据库系统概论(王珊,杜小勇,陈红) 第一章-绪论 思维导图 png, pdf, freemind格式
2025-04-20
C+学习笔记+树、堆、二叉树代码
2024-03-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人