自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 C++ string 类使用超全攻略(下):修改、查找、获取及常见实用接口深度解析

本文深入解析C++ string类的核心接口使用,重点讲解字符串修改操作及实用技巧。主要内容包括: 尾部追加的3种方式对比(operator+=、push_back、append) 插入删除操作(insert/erase)的使用方法及性能注意事项 字符串替换(replace)的两种实现方式比较 实用接口详解:find()查找子串、substr()截取子串、c_str()适配C函数、getline()读取带空格字符串 文章通过丰富代码示例演示各接口用法,并分析不同场景下的最优选择

2026-01-21 17:16:05 794 9

原创 C++ string 类使用超全攻略(上):创建、遍历及容量操作深度解析

本文详细介绍了C++中string类的核心接口使用。首先对比了C语言字符串的三大痛点与C++ string类的优势。重点讲解了string类的四种构造方式、三种遍历方法(下标访问、迭代器、范围for)以及容量操作接口(size/length、clear、resize、reserve等),并配有详细代码示例和注释说明。文章还特别解释了auto关键字和npos的含义,帮助读者更好地理解和使用string类。通过系统学习这些核心接口,读者可以更高效地处理字符串操作,提升编程效率。

2026-01-20 23:36:18 707 3

原创 别再用函数重载重复堆代码了!C++模板初阶:泛型与高效代码的艺术

本文介绍了C++模板编程的基础知识,包括函数模板和类模板的使用。函数模板通过模板参数实现通用代码,支持隐式和显式实例化;类模板通过显式实例化创建具体类型,并讲解了声明与定义分离的实现方法。文章以交换函数和栈实现为例,展示了模板如何提高代码复用率,同时解释了模板参数匹配原则和实例化机制。模板是C++泛型编程的基础工具,能有效减少重复代码,提升开发效率。

2026-01-19 18:11:18 911 11

原创 C++ 内存管理:自定义类型 new/delete 调用构造 / 析构深度解析

本文系统讲解了C/C++内存管理机制,重点对比了malloc/free与new/delete的异同。内容涵盖:1)内存分布(栈/堆/数据段/代码段);2)动态内存管理方式(C的malloc系列与C++的new/delete);3)new/delete底层原理(通过operator new/delete实现,自动调用构造/析构函数);4)定位new表达式;5)关键区别:new是操作符、支持初始化、自动调用构造/析构、抛异常等。文章强调对自定义类型要正确匹配使用new/delete,是C++内存管理的核心知识点

2026-01-18 21:49:07 1210 39

原创 吃透C++类和对象(下):内部类、匿名对象及编译器优化的深度解析

本文介绍了C++中内部类和匿名对象的概念及编译器优化技术。内部类是定义在另一个类内部的独立类,受外部类作用域限制,默认是外部类的友元类。匿名对象是临时创建未命名的对象,生命周期仅限当前行。文章还分析了编译器对构造+拷贝构造连续调用的优化策略,包括传值传参和传值返回时的优化处理,指出现代编译器会尽可能减少不必要的拷贝操作。这些内容是深入理解C++面向对象编程的重要知识点。

2026-01-17 18:47:56 876 32

原创 吃透C++类和对象(下):类型转换、static成员及友元的深度解析

本文主要介绍了C++中的类型转换、static成员和友元三个重要概念。在类型转换部分,讲解了内置类型与类类型的隐式转换规则、explicit关键字的作用以及多参数转换的实现。static成员部分详细说明了静态成员变量和函数的特性、初始化方式及访问方法。友元部分则阐述了友元函数和友元类的定义、使用场景及其注意事项,强调友元虽然提供了访问便利但会破坏封装性。全文通过代码示例和类比说明,帮助读者深入理解这些C++特性的工作原理和实际应用。

2026-01-17 12:02:08 861 31

原创 吃透C++类和对象(下):初始化列表深度解析

本文深入解析了C++构造函数初始化列表的核心概念与使用要点。文章首先指出函数体内赋值并非真正的初始化,初始化列表才是成员变量定义初始化的地方。重点讲解了const成员、引用成员和自定义类型成员必须使用初始化列表的原因,并对比了声明缺省值与形参缺省值的区别。通过具体代码示例,详细说明了初始化列表的执行顺序(按声明顺序而非书写顺序)以及各种初始化场景下的处理规则。最后通过练习题验证了初始化列表的实际应用效果,强调初始化列表是C++类成员初始化的关键机制。

2026-01-15 15:21:02 1298 17

原创 吃透C++类和对象(中):const成员函数与取地址运算符重载深度解析

本文深入解析C++中const成员函数和取地址运算符重载的关键知识点。const成员函数通过const修饰this指针为const Date* const,既防止修改指针指向,又保护对象内容不被篡改,同时确保const对象能调用成员函数。取地址运算符重载分为普通和const版本,默认由编译器生成,特殊场景可自定义实现以提高安全性。文章通过Date类实例演示了const成员函数的语法、使用场景和意义,以及取地址运算符重载的底层原理,帮助开发者编写更安全可靠的C++代码。

2026-01-14 20:28:12 621 24

原创 吃透C++类和对象(中):详解 Date 类的设计与实现

本文详细讲解了C++中Date类的设计与实现,主要包括日期运算、比较运算符重载和流操作等内容。通过复用运算符重载逻辑,有效减少了代码量。关键点包括:1)使用GetMonthDay函数确保日期计算准确性;2)实现+=/-=后复用其逻辑实现+/-运算;3)通过复用<和==运算符简化其他比较运算符实现;4)利用友元函数实现流插入/提取运算符重载;5)处理日期合法性检查。文章展示了前置/后置++/--的实现区别,以及日期减日期的计算方法。完整代码展示了Date类的封装性和复用性,为C++运算符重载学习提供了实践案例

2026-01-14 12:03:50 1116 26

原创 吃透C++类和对象(中):赋值运算符重载的深度解析

本文详细讲解了C++中的运算符重载和赋值运算符重载。首先介绍了运算符重载的基本概念,包括如何定义运算符重载函数、参数数量规则(成员函数比全局函数少一个参数),以及五个不能重载的运算符(.*、::、sizeof、?:、.)然后重点讲解了赋值运算符重载,包括其与拷贝构造的区别、参数建议使用const引用、返回值建议使用引用以提高效率。还分析了默认生成的赋值运算符重载的行为(内置类型浅拷贝,自定义类型调用其赋值重载),并指出当类管理动态资源时需要显式实现深拷贝。最后总结了何时需要显式实现赋值运算符重载的判断标准。

2026-01-12 21:50:13 789 13

原创 吃透C++类和对象(中):拷贝构造函数的深度解析

本文详细讲解了C++中的拷贝构造函数,主要包含以下内容:1. 拷贝构造函数的定义与特点,强调其第一个参数必须是类类型的引用;2. 通过Date类示例说明拷贝构造的实现方式;3. 分析浅拷贝与深拷贝的区别,指出当类成员涉及动态内存分配时必须实现深拷贝;4. 讨论传值返回与传引用返回的区别,建议合理使用static变量来优化引用返回。文章强调拷贝构造函数的重要性,并建议读者结合之前学习的构造函数知识加深理解。

2025-12-19 19:55:07 999 23

原创 吃透C++类和对象(中):构造函数与析构函数深度解析

本文深入讲解了C++中类的默认成员函数——构造函数和析构函数。构造函数用于对象初始化,具有名称与类名相同、无返回值、自动调用等特点,可分为无参、带参和全缺省三种形式。析构函数用于资源清理,在对象生命周期结束时自动调用,一个类只能有一个析构函数。文章通过代码示例详细说明了编译器默认生成的构造函数和析构函数的行为,以及何时需要自定义实现,特别强调了动态资源管理时必须自定义析构函数以避免内存泄漏。这些知识是掌握C++面向对象编程的重要基础。

2025-12-18 22:53:27 1033 30

原创 吃透C++类和对象(上):封装、实例化与 this 指针详解

本文详细讲解了C++中类和对象的核心概念,主要包括: 访问限定符的作用及使用场景、类的定义方式(class与struct的区别)和类域的概念、对象实例化过程和内存分配原理(成员变量存储在对象中,成员函数存储在代码区) this指针的底层机制及其在成员函数中的隐式使用 对象大小的计算规则(遵循内存对齐原则) C++与C语言实现栈的对比,体现面向对象封装特性 文章通过代码示例详细说明了类成员访问控制、成员函数定义、对象实例化等关键知识点,帮助读者深入理解C++面向对象编程的基础概念。

2025-12-17 23:47:00 805 38

原创 C++入门基础指南:引用全解析(从入门到精通)

本文深入讲解了C++中的引用机制,包括引用的概念、特性及使用场景。文章首先阐述了引用作为变量别名的本质,通过代码示例展示了引用与指针的异同。重点分析了引用在函数传参和返回值中的优势,特别是在减少拷贝、提高效率方面的作用。同时详细探讨了const引用的权限控制问题,解释了权限放大和缩小的概念。最后对比了指针与引用的区别,并介绍了C++11引入的nullptr关键字。这些基础内容为后续C++学习奠定了重要基础。

2025-12-16 21:34:24 986 29

原创 C++入门基础指南:输入输出、缺省参数与函数重载

本文介绍了C++入门基础的三个重要知识点:输入输出、缺省参数和函数重载。首先讲解了C++标准输入输出流库<iostream>的使用方法,包括cout/cin/endl等对象的使用规则。其次详细说明了缺省参数的概念和应用场景,通过栈初始化示例展示了其实际用途。最后阐述了函数重载的定义规则和调用限制,指出重载函数必须满足参数类型、数量或顺序不同的条件。文章还提及了这些特性与C语言的区别,为后续深入学习C++打下基础。

2025-12-07 18:03:58 778 27

原创 C++入门基础指南:命名空间namespace

本文介绍了C++入门基础知识中的命名空间(namespace)概念。命名空间用于解决C/C++中变量、函数和类名称冲突问题,通过定义独立作用域隔离同名标识符。文章详细讲解了命名空间的定义方式、嵌套使用方法,以及三种访问命名空间成员的途径:域作用限定符(::)、using关键字展开特定成员或整个命名空间。同时指出在项目中应谨慎使用全局展开以避免冲突风险。命名空间是C++区别于C语言的重要特性之一,掌握其使用对后续C++学习至关重要。

2025-12-05 21:38:24 960 30

原创 计数排序:高效非比较排序解析

本文详细介绍了非比较排序算法中的计数排序。首先阐述了计数排序的概念和思路,包括绝对映射和相对映射两种实现方式。然后通过代码示例展示了两种映射方法的实现,并分析了相对映射在处理数据范围分散时的优势。文章深入探讨了计数排序的时间复杂度O(N+range)和空间复杂度O(range),指出其在数据集中时的高效性,但也存在只能处理整数和数据分散时空间浪费的局限性。最后对比分析了常见排序算法的复杂度及稳定性,特别解释了快速排序和归并排序的空间复杂度差异。计数排序在特定场景下表现出色,但适用性有限。

2025-11-24 18:21:54 1217 36

原创 归并排序:递归与非递归全解析

本文详细讲解了归并排序的实现方法。首先介绍了归并排序的基本思想,即通过分治法将数组不断分解再合并排序。文章重点分析了递归版本的实现过程,包括典型错误写法导致的栈溢出问题及其改进方法。随后深入讲解了非递归版本的实现思路,包括如何通过gap变量控制归并范围,并针对数组元素个数非2^n的情况进行了特殊处理。文章通过代码示例和图示详细说明了归并排序的核心逻辑,比较了其与快速排序的区别(类似二叉树的后序和前序遍历)。最后指出归并排序和快速排序在实际应用中的重要性,并预告后续将进入C++语言学习阶段。

2025-11-23 15:04:12 964 27

原创 数据结构之排序-选择排序&交换排序

本文主要讲解了选择排序中的直接选择排序和交换排序中的快速排序算法。直接选择排序通过每次遍历找出最小和最大值进行交换,但需要注意当最大值在数组开头时的特殊情况处理。快速排序采用递归思想,通过基准值将数组分为左右两部分,其中重点讲解了hoare版本和lomuto前后指针版本的实现,并提出了三数取中和小区间优化等改进方法。此外还介绍了利用栈实现非递归版本的快速排序,避免了递归可能导致的栈溢出问题。文章通过代码示例和图示详细说明了各算法的实现逻辑和优化思路,为后续学习归并排序打下基础。

2025-11-21 23:40:54 886 34

原创 深入解析插入排序与希尔排序

摘要:本文详细介绍了两种插入排序算法——直接插入排序和希尔排序。直接插入排序通过逐个比较将元素插入到已排序序列中,时间复杂度为O(n^2)。希尔排序作为改进算法,采用分组预排序策略,通过gap值变化逐步使数组趋于有序,最后进行直接插入排序。文中阐述了两种gap取值方式(gap/2和gap/3+1),并通过代码实现和时间对比证明后者更优。希尔排序的时间复杂度理论上可达O(n^1.3)。本文不仅提供了完整代码示例,还通过图示和打印结果直观展示了排序过程,为后续学习选择排序和交换排序奠定了基础。

2025-11-19 15:28:33 820 39

原创 数据结构之二叉树-链式结构(下)

本文主要介绍了二叉树的链式结构及其相关算法实现。重点讲解了二叉树的销毁方法、层序遍历实现(需借助队列结构)、判断完全二叉树的算法(基于层序遍历改进)。随后通过6个经典二叉树OJ题展开实践:单值二叉树、相同树、对称树、子树判断、前序遍历实现及树的构建遍历。特别强调了递归思想在二叉树问题中的应用,如传址参数处理、前中后序遍历的实现差异等。文章最后指出链式二叉树对递归思维的较高要求,为后续数据结构学习奠定基础。

2025-11-16 14:26:48 822 36

原创 数据结构之二叉树-链式结构(上)

本文介绍了链式二叉树的实现方法及相关操作。主要内容包括:1. 通过链表结构实现二叉树,每个节点包含数据域和左右子树指针;2. 详细讲解了前序、中序、后序三种递归遍历方式及其代码实现;3. 重点实现了二叉树节点个数、叶子节点个数、高度计算、第k层节点个数等常用方法;4. 深入分析了查找指定值节点的多种实现方案,指出了常见错误并提供了最优解法。文章通过图示和代码示例详细解释了递归思想在二叉树操作中的应用,为学习和理解二叉树数据结构提供了实用指导。

2025-11-14 21:40:56 1096 39

原创 数据结构之二叉树-堆

本文详细介绍堆的概念、实现方法及应用场景。文章首先阐述了堆的基本概念,指出堆是一种特殊的完全二叉树,分为大根堆和小根堆两种。然后详细讲解了堆的代码结构,包括初始化、销毁、数据插入(向上调整算法)和数据删除(向下调整算法)等核心方法的实现过程。 文章重点分析了堆的两个主要应用:堆排序和TOP-K问题。在堆排序部分,比较了空间复杂度为O(N)和O(1)两种实现方法。在TOP-K问题部分,提出了一种高效解决方案,通过建立大小合适的堆来避免内存浪费。本文系统性地介绍了堆这种数据结构,对理解堆及其应用具有重要指导意义

2025-11-10 15:33:10 1046 47

原创 数据结构之二叉树-初见介绍

本文介绍了树和二叉树的基本概念。树是一种非线性数据结构,由有限节点组成具有层次关系的集合,重点讲解了树的度、叶子节点、父节点等术语。二叉树作为特殊树结构,每个节点最多有两个子节点,分为满二叉树和完全二叉树两种特殊类型。在存储结构方面,顺序结构适合存储完全二叉树,链式结构通过左右指针表示节点关系。文章为后续学习顺序结构二叉树(堆)奠定了基础,有助于理解非线性数据结构的特点和应用。

2025-11-03 22:23:15 1121 34

原创 数据结构之栈和队列-队列

本文详细介绍了队列数据结构的概念、实现方法和典型算法题。首先阐述了队列"先进先出"的特性及其应用场景,讲解了基于链表的队列实现方式(含初始化、销毁、插入、删除等操作)。随后通过三个经典算法题:1)用两个队列实现栈功能;2)用两个栈实现队列功能;3)设计循环队列,深入剖析了不同数据结构间的转换原理与实现技巧。文中特别强调了假溢出问题的解决方案(多开辟一个空间)和循环队列的判空判满条件,并提供了完整的C语言代码实现。最后指出栈和队列虽受操作限制但在特定场景中仍具有重要价值。

2025-11-02 23:56:46 1036 37

原创 数据结构之栈和队列-栈

本文介绍了栈这一数据结构的基本概念和实现方法。栈是一种遵循后进先出原则的线性表,可通过数组或链表实现。文章详细讲解了栈的结构定义、初始化、销毁等基本操作,并重点阐述了入栈、出栈、取栈顶数据、判断栈空和获取栈大小等关键方法的代码实现。此外,还以一道有效括号匹配的算法题为例,展示了栈在实际问题中的应用。通过数组实现的栈具有缓存利用率高、尾部操作高效等优点,是栈实现的常见选择。文章内容由浅入深,既讲解了理论基础,又提供了具体代码实现,对学习栈这一数据结构具有较好的指导意义。

2025-10-31 22:01:10 925 40

原创 数据结构之链表OJ

本文系统讲解了链表相关的经典算法题目,包括8个典型问题及其解法。主要内容包括:1)使用快慢指针高效解决链表中间节点和倒数第k个节点问题;2)三指针法实现链表反转;3)结合前序题目解决回文链表问题;4)利用长度差法处理相交链表;5)深入分析环形链表问题,给出两种证明方法;6)基于相交链表思想解决环形链表入口问题;7)通过创建节点副本实现随机链表的深拷贝。文章通过图示和数学推导详细阐述了各算法的实现原理,特别强调了快慢指针在链表问题中的核心应用,展示了算法题目的巧妙解法和严密逻辑。

2025-10-29 15:05:21 929 24

原创 数据结构之算法复杂度

本文系统介绍了算法复杂度分析的基本概念和方法。主要内容包括:1.算法效率的衡量标准,提出时间复杂度和空间复杂度两个评估维度;2.时间复杂度的概念及大O渐进表示法的推导规则,通过多个示例演示了不同算法的时间复杂度计算;3.空间复杂度的定义和计算方法,重点分析了递归算法的空间消耗;4.通过旋转数组问题展示了不同复杂度算法的实现思路。文章强调复杂度分析对算法评估的重要性,指出在计算机存储容量大幅提升的今天,时间复杂度成为更关键的衡量指标,并提供了常见算法复杂度分析的实用方法。

2025-10-26 20:20:04 1200 26

原创 项目实践-贪吃蛇-下(作为C语言学习的收尾)

本文详细介绍了贪吃蛇游戏的设计与实现过程。主要内容包括:1)游戏地图设计,使用宽字符绘制墙体、蛇身和食物;2)数据结构设计,采用链表结构管理蛇身节点,定义蛇方向、状态等枚举类型;3)核心逻辑实现,涵盖游戏初始化、蛇移动、碰撞检测、计分等功能;4)国际化处理,通过setlocale支持宽字符显示。文章系统性地讲解了从游戏框架搭建到具体功能实现的完整开发流程,展示了如何将C语言基础知识应用于实际项目开发中,最终构建出一个完整的贪吃蛇游戏。

2025-10-25 21:23:26 961 21

原创 项目实践-贪吃蛇-上(作为C语言学习的收尾)

本文介绍了使用C语言在Windows控制台实现贪吃蛇游戏的技术要点,重点讲解了Win32API的相关知识。内容包括控制台程序设置、COORD坐标结构、光标控制函数(Get/SetConsoleCursorInfo、SetConsoleCursorPosition)以及键盘输入检测(GetAsyncKeyState)。通过封装Setpos函数简化光标定位,并利用宏定义检测按键状态,为贪吃蛇游戏开发打下基础。这些Win32API技术将用于实现游戏地图绘制、蛇移动控制、碰撞检测等功能。

2025-10-23 15:45:28 933 22

原创 数据结构之双向链表专题

本文详细讲解了双向链表的数据结构及其实现方法。首先介绍了链表的三种分类方式:带头/不带头、单向/双向、循环/不循环,并指出实际最常用的是不带头单向不循环链表和带头双向循环链表两种。重点分析了双向链表的结构特点,即每个节点包含前驱和后继指针,形成循环结构。随后详细讲解了双向链表的各种操作实现:初始化、头插尾插、头删尾删、查找、指定位置插入删除等。特别解释了双向链表与单链表在参数传递上的区别,指出只有当需要修改链表头节点地址时才需使用二级指针。最后通过测试代码验证了各方法的正确性,并给出了完整的双向链表实现方案

2025-10-22 00:22:15 953 14

原创 数据结构之单链表专题

本文详细讲解了单链表的数据结构实现。文章从链表的概念入手,通过火车车厢的比喻形象解释了链表的逻辑线性与物理非连续特性。随后重点介绍了单链表的各项操作实现:包括节点创建、打印、头插尾插、头删尾删、查找、指定位置插入删除等,通过调试演示了地址传参、指针操作等关键问题。文中特别强调了链表操作中容易忽视的细节,如释放空间顺序、节点连接方式等,并通过大量测试案例验证代码的健壮性。最后给出了完整的链表销毁方法。全文兼顾理论讲解与实践演示,对学习和复习单链表数据结构具有较高参考价值。

2025-10-17 23:58:29 1053 18

原创 数据结构之顺序表的应用

本文详细介绍了基于动态顺序表实现通讯录项目的完整过程。重点解决了头文件相互包含问题,采用前置声明避免递归包含。随后实现了通讯录核心功能:初始化、销毁、添加(支持任意位置插入)、删除(按姓名查找)、修改和展示联系人数据。通过测试代码验证了各功能的正确性,最终整合成完整的通讯录系统,包含菜单界面和功能选择。文章还指出当前版本数据无法持久化存储的问题,建议结合文件操作改进。该项目将数据结构理论与实际应用结合,展示了顺序表在工程中的典型应用场景。

2025-10-12 16:57:18 1190 16

原创 数据结构的开始之顺序表专题

本文介绍了数据结构中顺序表的相关概念和实现。主要内容包括:1.数据结构基础概念,说明了数据结构是组织和存储数据的方式,并解释了学习数据结构的必要性;2.顺序表与数组的区别,指出顺序表是基于数组的封装;3.顺序表的分类,包括静态和动态顺序表;4.动态顺序表的具体实现,通过三个文件(SeqList.h、SeqList.c、Test.c)展示了初始化、增删改查等操作的代码实现。文章通过具体代码示例,详细讲解了动态顺序表的各种操作实现方法。

2025-10-07 22:24:11 1254 25

c语言学习回顾 数组和函数实践:扫雷游戏

以c语言来实现一个扫雷游戏,在代码中有注释来介绍各个函数的名称以及作用,并且也有自己在写代码过程中的总结、许多注意事项、扫雷每个板块的逻辑以及为什么要这样去写,都在代码中的注释里详细说明了,免费下载,供大家来参考

2025-09-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除