- 博客(58)
- 收藏
- 关注
原创 【C/C++刷题集】string类(一)
本文介绍了四个字符串处理算法题解:1. 计算字符串最后一个单词长度,使用getline读取整行并通过rfind定位空格;2. 验证回文串,通过过滤非字母数字字符并转换大小写后双指针判断;3. 寻找字符串中第一个唯一字符,利用数组统计字符出现次数;4. 反转字符串,使用双指针交换首尾字符。每个解法都提供了详细思路和代码实现,涉及字符串常用操作和基础算法技巧。
2025-12-21 16:50:40
1014
26
原创 【C++】string类(二)
本文介绍了C++ string类的常用成员函数,分为两部分讲解:第一部分包括max_size()、capacity()、clear()、empty()、reserve()、shrink_to_fit()和resize()等容量相关函数;第二部分涵盖push_back()、append()、operator+=、operator+、assign()、insert()、erase()和replace()等字符串操作函数。文章详细说明了各函数的用法、注意事项和实际应用场景,如字符串替换问题的两种解决方案
2025-12-17 12:30:00
1220
24
原创 【C++】string类(一)
本文介绍了C++ STL(标准模板库)的基础知识,包括STL简介、编码方式、string类、迭代器、算法find、auto关键字和范围for循环。主要内容包括:1. STL的六大组件和不同版本特点;2. 不同编码方式下汉字所占字节数的差异;3. string类的初始化、遍历和修改方法;4. 迭代器的使用及其优势,包括正向、反向和const迭代器;5. auto关键字在简化代码中的应用;6. 范围for循环的语法和使用场景。文章通过代码示例详细展示了这些核心概念的实际应用,帮助读者快速掌握C++ STL的基础
2025-12-17 10:00:00
1186
20
原创 【C/C++刷题集】类和对象算法题(一)
本文介绍了多种日期和数值计算的C++实现方法。1. 数列求和:通过静态成员变量和变长数组实现1+2+...+n的计算,巧妙规避循环和条件判断的限制。2. 日期处理: 打印日期:根据年份和第n天计算对应日期 日期累加:处理日期的进位逻辑 日期转换:计算指定日期是当年的第几天 日期差值:计算两个日期之间的天数差 实现特点: 使用类封装日期操作 处理闰年等特殊情况 提供多种实现思路(暴力枚举、数学计算等) 优化日期格式输出(补零等) 这些方法展示了C++在数值和日期计算中的灵活应用。
2025-12-15 12:30:00
1009
32
原创 【C++同步练习】模板初阶
摘要:本文系统回顾了C++模板的核心概念与应用。函数模板通过类型参数实现代码复用,强调类型推导规则和语法要点(如typename/class声明)。类模板作为参数化类蓝图,支持多参数和特化,需注意实例化规则。通过典型例题解析,指出常见误区:函数模板不支持隐式类型转换(B选项错误),类模板在运行时不会检查类型(C选项错误),模板类与普通类的编译处理不同(D选项错误)。正确模板声明需每个参数前加typename/class(4/6/7选项正确)。模板机制本质是编译时实例化,兼具类型安全与高效性。
2025-12-15 08:00:00
1833
20
原创 【C++同步练习】内存管理
摘要:本文介绍了C++内存划分及new/delete操作。内存分为栈区(自动管理)、堆区(手动管理)、全局/静态区、代码段和常量区。new/delete用于动态内存管理,会自动调用构造/析构函数,需注意匹配使用(new对应delete,new[]对应delete[])。通过选择题解析了常见错误,如栈/堆生长方向、内存碎片问题、静态分配限制等。重点强调:数组释放必须用delete[],否则可能引发内存泄漏或崩溃;内置类型虽不会崩溃但不建议混用。正确理解内存管理是避免程序错误的关键。
2025-12-14 12:30:00
1911
21
原创 【C++同步练习】类和对象(三)
摘要:本文回顾了C++中const成员变量、引用类型成员、静态成员变量等初始化规则,强调const和引用成员必须通过初始化列表初始化,静态成员需在类外初始化。同时解析了static变量的存储特性及作用域规则,指出static成员函数无this指针。最后讨论了友元机制,说明友元函数可访问类的所有成员但不具备this指针。通过示例题目加深了对初始化顺序、静态成员和友元特性的理解。
2025-12-14 09:00:00
1323
32
原创 【C++】模板初阶
本文介绍了C++模板编程的基础知识,主要包括泛型编程概念、函数模板和类模板三部分内容。首先阐述了泛型编程的意义,通过模板可以编写与类型无关的通用代码,提高代码复用率。其次详细讲解了函数模板的定义格式、原理和实例化方式(隐式/显式),以及模板参数的匹配原则。最后介绍了类模板的定义格式、实例化方法和缺省参数的使用。文章通过大量代码示例展示了模板的实际应用,包括交换函数、加法运算和栈实现等,帮助读者理解模板编程的核心思想和实现方式。
2025-12-10 17:08:16
1454
36
原创 【C++】内存管理(下)
本文主要介绍了C++中的内存管理方式,重点对比了new/delete与malloc/free的区别。文章首先讲解了new/delete对内置类型和自定义类型的操作,指出new会调用构造函数而malloc不会。其次介绍了operator new/delete函数的底层实现原理,它们本质是对malloc/free的封装。接着分析了new/delete的实现机制,包括对内置类型和自定义类型的处理差异。最后详细对比了malloc/free和new/delete在用法、核心特性和原理三个层面的区别
2025-12-08 14:30:00
1069
27
原创 【C++】内存管理(上)
本文系统介绍了计算机内存管理的核心概念与实现机制。首先阐述了内存管理的必要性,包括解决物理限制、提供隔离保护、提升系统效率等。重点分析了进程内存的四大分区:代码段(存储程序指令和常量)、数据段(存放全局/静态变量)、堆(动态分配内存区)和栈(函数调用上下文区),通过对比表格详细说明了各区域特性。文章以Linux x86-64为例展示了实际内存布局,并通过C/C++代码示例解析了不同变量的存储位置。最后简要对比了malloc/calloc/realloc的区别,并提及malloc的实现原理。
2025-12-08 08:30:00
1285
24
原创 【C++】类和对象(六) -- 友元、内部类、匿名对象、对象拷贝时的编译器优化
本文系统讲解了C++中的友元、内部类、匿名对象及编译器优化技术。友元部分详细介绍了友元函数和友元类的声明方式、单向特性及使用注意事项;内部类章节阐述了其独立性和作为外部类友元的特性;匿名对象部分说明了其生命周期和应用场景;最后分析了编译器对对象拷贝的合并优化策略。全文通过代码示例展示了这些特性的实际应用,并强调了合理使用这些技术对提高程序效率的重要性。
2025-12-05 15:00:00
1843
37
原创 【C++】类和对象(五) -- 类型转换、static成员
本文摘要: C++类型转换分为隐式转换和显式转换。隐式转换包括内置类型转换(需相关构造函数支持)和类类型间转换(需目标类提供源类参数的构造函数),可通过explicit禁用。编译器会对连续构造+拷贝构造优化为直接构造。static成员变量属于类而非对象,需类外初始化;静态成员函数无this指针,仅能访问静态成员。非静态函数可访问所有静态成员。静态成员受访问限定符限制,可通过类名或对象访问。练习示例展示了全局变量、局部变量和静态变量的构造与析构顺序规则。
2025-12-03 20:01:06
1365
31
原创 【C++】类和对象(四) -- 取地址运算符重载、构造函数plus
本文介绍了C++运算符重载的实现方法,重点分析了流插入(<<)和流提取(>>)运算符的重载。由于成员函数重载会导致this指针抢占第一个形参位置,不符合使用习惯,因此需要将<<和>>重载为全局友元函数。文章以日期类为例,详细展示了各种运算符重载的实现,包括比较运算符、算术运算符、递增递减运算符等。同时介绍了const成员函数的用法,以及取地址运算符重载的特殊场景。通过运算符重载可以增强代码的可读性和易用性,使自定义类型能像内置类型一样使用标准运算符。
2025-12-03 18:53:47
1273
30
原创 【C++同步练习】C++入门
本文回顾了C++核心概念:命名空间(避免命名冲突)、缺省参数(简化函数调用)、函数重载(同名函数多态)、引用(变量别名)、内联函数(提升效率)和nullptr(强类型空指针)。重点解析了各特性的本质、用法规则及常见错误选项,如命名空间非必须用using namespace std、缺省参数需从右至左设置、函数重载依赖参数列表而非返回值、引用必须初始化且不可修改指向、内联函数适合短小频繁调用的场景等。通过选择题解析帮助读者深入理解这些特性的区别与应用场景。
2025-12-01 16:30:00
1206
30
原创 【C++】类和对象(三) -- 拷贝构造函数、赋值运算符重载
本文系统讲解了C++中的拷贝构造函数和赋值运算符重载。拷贝构造函数是一种特殊构造函数,其参数必须是类类型的引用,否则会导致无限递归。编译器会自动生成浅拷贝的拷贝构造函数,但对于管理资源的类需要自定义深拷贝实现。赋值运算符重载是成员函数,参数建议使用const引用,返回引用以支持连续赋值。内置类型成员会进行值拷贝,自定义类型成员会调用其赋值运算符重载。文章还演示了日期类的实现,包括日期加减运算、前置/后置自增运算符重载等。通过复用操作符重载函数(如+=复用+),可以提高代码复用性和可维护性。
2025-12-01 08:00:00
1521
31
原创 【C++】类和对象(二) -- 构造函数、析构函数
本文介绍了C++类的默认成员函数,重点讲解了构造函数和析构函数。默认成员函数包括6个主要函数,其中构造函数和析构函数最为重要。构造函数在对象实例化时自动调用,用于初始化对象,具有重载特性;析构函数在对象销毁时自动调用,用于资源清理。文章通过Date和Stack类的示例,对比了C++和C实现栈结构的不同,展示了构造函数和析构函数在简化代码、避免资源泄漏方面的优势,并以括号匹配问题为例说明了其实际应用价值。
2025-11-25 15:00:00
1118
30
原创 【C++】类和对象(一) -- 类的定义、实例化、this指针详解及C++和C语言实现Stack对比
本文系统介绍 C++ 类的核心概念与实现机制:类以 class/struct 定义,含成员变量和方法,通过访问限定符实现封装(class 默认 private,struct 默认 public);实例化分配成员变量空间,成员函数存代码段,空类对象占 1 字节,对象大小遵循内存对齐;编译器为成员函数隐式添加 this 指针,空指针调用不访问成员变量的函数不崩溃。对比 C 语言,C++ 封装更严格、语法更简洁,文章以代码示例和栈实现对比,展现封装优势。
2025-11-25 08:00:00
1238
34
原创 【C++】C++入门 -- inline、nullptr
本文介绍了C++中的两个重要特性:内联函数(inline)和空指针(nullptr)。内联函数通过编译器展开替代函数调用,提高小函数执行效率,但要注意避免代码膨胀,且不适用于递归或复杂函数。nullptr是C++11引入的空指针专用字面量,解决了传统NULL可能引发的类型歧义问题,建议在C++11及以上版本优先使用nullptr替代NULL。文章通过代码示例展示了inline函数的应用场景和注意事项,以及nullptr相比NULL的类型安全优势,为C++开发者提供了实用的编程建议。
2025-11-21 16:30:00
1338
37
原创 【C++】C++入门 -- 函数重载、引用
本文介绍了C++中函数重载和引用的核心概念。函数重载允许同名函数根据参数类型、个数或顺序不同进行区分,但不支持仅返回值不同。引用是为变量创建别名,与指针类似但更安全,必须初始化且不能改变指向对象。文章详细讲解了引用的特性、使用场景(如参数传递和返回值)、const引用以及指针与引用的区别。引用能减少拷贝提高效率,但某些场景仍需指针。文中通过代码示例展示了函数重载的实现、引用传参的便利性,并强调了权限控制(const引用)的重要性。
2025-11-21 08:00:00
1247
26
原创 【C++】C++入门 -- 输入&输出、缺省参数
本文主要介绍了C++中的输入输出流以及缺省参数的使用方法。在C++IO部分,详细讲解了标准输入输出对象cin/cout的使用方式,通过运算符重载实现自动类型识别,并提供了提高IO效率的技巧。在缺省参数部分,区分了全缺省和半缺省两种形式,强调半缺省必须从右往左连续缺省,并指出函数声明和定义不能同时指定缺省参数以避免编译错误。文章通过代码示例直观展示了各种用法,帮助读者掌握C++基础特性的关键要点。
2025-11-18 18:15:17
1088
28
原创 【C++】C++入门 -- 命名空间
本文介绍了C++学习的基本要点,包括推荐书籍《C++ Primer》《STL源码剖析》《Effective C++》以及参考文档资源。通过对比C语言的"Hello World"程序,展示了C++基础语法。重点讲解了命名空间(namespace)的概念、定义方式和使用方法,包括正常定义、嵌套命名空间、多文件合并等特性,以及三种命名空间使用方式:指定访问、部分展开和全部展开。文章强调命名空间在解决命名冲突中的重要作用,并提供了实际代码示例说明域作用限定符(::)和using语句的用法。
2025-11-18 08:30:00
1124
37
原创 【数据结构】常见的排序算法 -- 归并排序
本文介绍了归并排序算法及其实现。归并排序采用分治策略,通过递归分解数组为子序列后进行合并排序,最终得到有序数组。文中详细讲解了算法思想、核心步骤和C语言实现代码,并分析了其时间复杂度(O(n*logn))和空间复杂度(O(n))。通过性能测试对比了插入、希尔、选择、堆、快速、归并和冒泡排序的效率。最后总结了排序算法的稳定性、空间复杂度及适用场景,指出稳定排序保持相等元素相对顺序,不同规模数据需选用合适算法(小规模用简单排序,大规模推荐快速或归并排序)。
2025-11-12 16:02:57
808
48
原创 【数据结构】常见的排序算法 -- 交换排序
本文介绍了两种交换排序算法:冒泡排序和快速排序。冒泡排序通过相邻元素比较交换,逐步将最大值"冒泡"到数组末尾,时间复杂度为O(N^2)。快速排序采用分治思想,选取基准值将数组分为两部分递归排序,包括hoare、挖坑法和前后指针三种实现方式,平均时间复杂度为O(n*logn)。文章还提供了快速排序的非递归实现方案,采用栈结构模拟递归过程,保持了算法的高效性但避免了递归带来的额外开销。两种算法平均时间复杂度差异明显,快速排序在实际应用中更高效。
2025-11-12 08:00:00
991
35
原创 【数据结构】常见的排序算法 -- 选择排序
本文介绍了两种排序算法:直接选择排序和堆排序。直接选择排序通过每次选出最小(或最大)元素并交换到起始位置实现排序,其时间复杂度为O(N²),空间复杂度为O(1),虽然思想简单但效率较低。堆排序基于堆数据结构,通过构建大顶堆并反复交换堆顶元素实现排序,时间复杂度为O(nlogn),空间复杂度为O(1),效率更高但实现较复杂。两种算法均属于不稳定排序,适用于不同场景。文章还提供了详细的代码实现,包括选择排序的双边优化和堆排序的上下调整算法。
2025-11-10 08:00:00
1340
37
原创 【数据结构】常见的排序算法 -- 插入排序
文章介绍了两种插入排序算法——直接插入排序和希尔排序。直接插入排序通过逐个插入元素构建有序序列,时间复杂度O(N²),接近有序时效率较高。希尔排序是直接插入排序的改进版本,通过分组排序(gap递减)提高效率,平均时间复杂度约为O(nlogn)。文章详细阐述了两种算法的原理、代码实现(附C语言示例)和特性对比,指出希尔排序通过预排序优化了直接插入排序的性能。特别说明了希尔排序时间复杂度计算的不确定性,并引用了严蔚敏《数据结构》中的相关结论。
2025-11-05 14:00:00
1215
39
原创 【C/C++刷题集】二叉树算法题(二)
本文介绍二叉树遍历的递归实现方法,包括前序、中序、后序遍历。前序遍历按"根→左→右"顺序收集节点值,中序遍历为"左→根→右",后序遍历为"左→右→根"。每个算法都包含计算节点数的BinaryTreeSize函数和实现具体遍历顺序的递归函数。文末还展示了根据先序字符串构建二叉树并进行中序遍历的示例,通过createTree函数递归构建树,InOrder函数实现遍历输出。所有方法都采用动态内存分配存储结果数组,体现了递归在树遍历中的典型应用。
2025-11-05 08:00:00
1265
33
原创 【C/C++刷题集】二叉树算法题(一)
本文介绍了四道二叉树相关的算法题目:1. 单值二叉树:通过递归遍历整棵树,检查所有节点值是否与根节点相同;2. 相同树判断:递归比较两棵树的节点结构和值;3. 对称二叉树:使用相同树判断函数,交叉比较左右子树实现镜像对称检查;4. 子树判断:递归检查主树中是否存在与子树完全相同的结构。每个问题都给出递归解法,并通过示例图解析递归过程。四道题目层层递进,从基础遍历到复杂结构比较,展示了递归在树问题中的应用技巧。
2025-10-31 20:24:59
1168
33
原创 【数据结构】五分钟带你快速解决“基础”二叉树
本文总结了二叉树的基本性质和常见概念,包括结点度、层次、高度等定义,以及满二叉树和完全二叉树的结点数量公式。详细介绍了三种遍历方式(前序、中序、后序)的递归实现代码和遍历规则。通过8道典型填空题解析,展示了如何利用二叉树性质计算叶子结点数、树高,以及根据遍历序列还原二叉树结构的方法。特别讲解了完全二叉树的特点、遍历序列间的转换关系,以及如何通过中序和后序序列推导二叉树前序遍历结果,为二叉树相关问题提供了系统的解题思路和方法。
2025-10-31 08:00:00
783
33
原创 【数据结构】链式结构二叉树详解
本文介绍了二叉树的链表表示方法及其相关操作。主要内容包括: 二叉树链表结构定义,包含数据域和左右指针域; 三种遍历方式:前序(根左右)、中序(左根右)、后序(左右根)的递归实现及图解; 二叉树基本操作实现:计算节点数、叶子节点数、第k层节点数、树深度、查找特定值节点、销毁树等; 借助队列实现层序遍历; 完全二叉树的判断方法,通过队列检查节点排列顺序。 文章通过代码示例和图解详细说明了二叉树的各种操作实现原理,并提供了完整的头文件和测试用例。所有操作均采用递归方式实现,体现了二叉树的递归特性。
2025-10-29 16:00:00
849
34
原创 【数据结构】顺序结构二叉树详解
本文介绍了堆这种使用数组存储的完全二叉树结构,重点分析了堆的实现与应用。主要内容包括:1. 堆的概念与性质,分为大堆和小堆两种形式;2. 堆的实现方法,包括初始化、销毁、插入、删除等操作,详细讲解了向上调整和向下调整算法;3. 堆的应用场景,包括堆排序和TOP-K问题解决方案,比较了两种堆排序实现的时间复杂度;4. 针对TOP-K问题,提出利用小堆结构高效找出前K个最大元素的算法。文章通过代码示例展示了堆的具体实现过程,并分析了不同算法的时间复杂度。
2025-10-29 09:30:00
1136
33
原创 【C语言】函数栈帧的创建和销毁
本文介绍了函数调用过程中栈和栈帧的工作原理。栈是遵循"后进先出"原则的内存区域,用于管理函数调用;栈帧是为单个函数调用分配的内存区域,包含局部变量、参数等信息。文章以x86架构为例,详细解析了函数调用的三个阶段:创建栈帧(参数压栈、保存返回地址、建立新栈帧)、函数执行(访问参数和局部变量)、销毁栈帧(返回值处理、恢复寄存器、清理参数)。栈帧机制实现了函数调用/返回、作用域隔离、递归调用等功能,也是调试器生成调用堆栈的基础。通过ebp和esp寄存器的配合,系统能有效管理函数调用的内存空间。
2025-10-26 09:30:00
1109
24
原创 【数据结构】初识树与二叉树
摘要: 树是一种非线性数据结构,由具有层次关系的节点组成,具有根节点、子树等特性。相关术语包括父节点、子节点、度、层次等。二叉树是树的一种,每个节点最多有两个子节点,分左右子树。特殊类型包括满二叉树(每层节点数达最大值)和完全二叉树(除最后一层外节点数达最大)。二叉树存储方式分为顺序结构(适合完全二叉树)和链式结构(二叉链或三叉链)。树结构广泛应用于文件系统等场景。
2025-10-24 15:30:00
879
41
原创 【数据结构】队列“0”基础知识讲解 + 实战演练
本文系统介绍了队列的概念、实现及应用。队列作为先进先出(FIFO)的线性表,其核心操作包括入队和出队。文章重点分析了链表与数组两种实现方式的优劣:链表具有动态内存分配、高效插入删除、适应内存碎片等优势,更适合队列场景。详细给出了基于链表的队列C语言实现代码,包含初始化、销毁、入队、出队等核心操作。最后通过两个经典算法题展示了队列与栈的相互实现:1)用两个队列模拟栈操作;2)用两个栈模拟队列操作。文章内容全面,理论与实践结合,既阐述了数据结构原理,又提供了具体实现方案。
2025-10-24 09:00:00
832
30
原创 【数据结构】栈“0”基础知识讲解 + 实战演练
本文介绍了栈的概念、实现及典型应用。栈是一种后进先出(LIFO)的线性表,支持压栈和出栈操作。相比链表,数组实现栈具有访问效率高、空间利用率优、实现简单和缓存友好等优势。文章详细给出了基于数组的栈实现代码,包括初始化、销毁、入栈、出栈等操作。最后以有效的括号匹配算法为例,展示了栈的实际应用,通过遍历字符串将左括号入栈,与右括号匹配后出栈,最终判断栈是否为空来验证括号的有效性。该算法的时间复杂度为O(N)。
2025-10-23 16:30:00
1495
26
原创 【数据结构】双向链表“0”基础知识讲解 + 实战演练
本文详细介绍了双向链表的实现原理与操作方法。主要内容包括:1)双向链表的结构定义,包含数据域data、前驱指针prev和后继指针next;2)带头双向循环链表的特性,使用哨兵位实现空链表;3)完整代码实现,包括初始化、插入/删除节点(头插尾插、头删尾删)、查找、销毁等核心操作;4)单链表算法题解,如链表分割和随机链表的深拷贝问题。文章通过图示和代码示例详细讲解了双向链表的实现细节,并对比了顺序表与链表的差异,最后提供了算法练习资源。
2025-10-23 09:30:00
1014
30
原创 【数据结构】单链表“0”基础知识讲解 + 实战演练
本文系统介绍了单链表的基本概念、实现方法和常见算法题解。主要内容包括:1.单链表结构与特点:非连续存储,通过指针链接实现逻辑顺序;2.单链表实现:详细讲解结点定义、插入删除等基本操作;3.常见算法题解:包括链表反转、中间节点查找、回文判断、环形链表检测等,提供多种解题思路和时间复杂度分析;4.重点算法证明:如快慢指针相遇原理、入环点位置确定等数学推导。文章通过理论讲解和代码实现相结合的方式,帮助读者全面掌握单链表相关知识和应用技巧。
2025-10-17 09:30:00
1196
39
原创 【数据结构】顺序表0基础知识讲解 + 实战演练
本文介绍了顺序表的概念、实现方法及常见算法题解。顺序表是基于数组实现的线性结构,分为静态和动态两种形式,其中动态顺序表支持扩容操作。文中详细讲解了顺序表的初始化、增删改查等基本操作实现,并通过头文件、源文件和测试文件展示了模块化编程思想。针对LeetCode经典题目,提供了多种解题思路,包括双指针法、合并排序等,分析了各类解法的时间/空间复杂度。最后指出了顺序表在插入删除和扩容方面的局限性,引出了链表数据结构作为优化方案。全文系统性地梳理了顺序表的核心知识点,为后续学习链表打下基础。
2025-10-06 16:30:00
2169
30
原创 【数据结构】算法复杂度
本文主要探讨算法效率的衡量标准,重点分析时间复杂度和空间复杂度。通过旋转数组的案例,比较三种不同解法:原始解法(O(n²)时间)、空间换时间法(O(n)空间)、三次逆置法(O(1)空间)。详细讲解大O表示法的计算规则,包括保留最高阶项、去除常数系数等原则,并通过多个示例(如冒泡排序、递归等)演示复杂度计算方法。文章强调时间复杂度关注执行次数增长量级,空间复杂度计算额外开辟的变量空间,并指出实际应用中通常关注最坏情况下的复杂度表现。最后对比常见复杂度等级,指导开发者选择最优算法。
2025-10-06 09:30:00
1557
22
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅