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