- 博客(40)
- 收藏
- 关注
原创 【C++篇】:list容器—带你真正读懂迭代器底层原理与vector对比
本文深入讲解STL中list容器的底层结构与核心特性。list采用带头双向循环链表实现,不支持随机访问,但插入删除操作时间复杂度为O(1),且迭代器仅在删除时失效。其迭代器为双向迭代器,不支持+、[]等操作,因此std::sort无法使用,需调用list::sort()成员函数。文章重点剖析了模板参数Ref和Ptr的作用——实现对const与非const对象的兼容访问,使迭代器能正确支持*和->操作。通过分离节点、迭代器与容器三者职责,清晰揭示了list模拟实现的逻辑架构。
2026-10-14 22:58:05
235
原创 【C++篇】:一篇文章带你理解透彻vector底层原理、模拟实现与深浅拷贝问题
本文深入解析C++中vector的底层机制,重点探讨其动态内存管理、扩容原理及深拷贝问题。通过模拟实现vector,揭示了为何不能使用memcpy进行对象拷贝——对自定义类型(如string)会导致浅拷贝与内存崩溃。强调了深拷贝的重要性,以及迭代器在扩容或删除操作后的失效问题。核心在于理解:管理动态资源的类必须自行处理资源生命周期,而非依赖内存复制。学习vector不仅是掌握容器用法,更是掌握资源安全管理和类设计的关键。
2026-10-13 22:30:46
94
原创 【C++篇】:string类——常用接口、底层原理与深浅拷贝
本文系统讲解C++中string类的核心概念与实践应用,重点剖析其相较于C语言字符串的优势:封装性、易用性及高效管理。通过接口使用、容量操作及常见误区,强调string的动态资源管理机制。文章核心在于深入理解深拷贝与浅拷贝的本质——避免多个对象共享同一块内存导致的崩溃问题,并通过模拟实现展示拷贝构造、赋值运算符的正确写法(传统与swap现代版)。最终指出:掌握string不仅是学会接口,更是理解面向类和对象的关键
2026-09-30 20:30:00
185
原创 【 C++篇】:模板初阶——泛型编程、函数模板与类模板
本文介绍了泛型编程的核心——模板,重点讲解函数模板与类模板的定义、实例化(隐式与显式)及参数匹配原则。通过函数模板实现代码复用,避免重复编写类型相关的函数;类模板则支持类型无关的类设计。文中强调模板并非具体函数,而是编译时根据实参生成特定版本的“蓝图”,并对比了普通函数与函数模板的调用优先级,帮助理解C++中模板机制的本质与应用。
2026-09-20 21:45:52
178
3
原创 【C++篇】:内存管理
本文系统梳理C++内存管理机制,对比C语言动态内存管理(malloc/free)与C++的new/delete操作符。重点解析栈区与堆区的区别,阐明new/delete在对象创建时自动调用构造函数、析构函数的优势。强调动态内存申请与释放必须成对使用,特别是new[]与delete[]的对应关系。同时指出内存泄漏这一核心问题,为高效安全的内存管理提供理论基础。
2026-09-19 13:44:11
169
3
原创 C++篇:类和对象(下)
本文深入探讨C++类与对象的核心概念,涵盖初始化列表的必要性、初始化顺序由声明顺序决定、explicit关键字防止隐式类型转换、static成员变量与函数的共享特性及使用场景、友元函数与类突破封装的机制及其单向性与不可传递性,以及内部类作为外部类友元的特性。文章强调封装的重要性,指出友元虽解决特殊访问需求但应慎用,最终总结各知识点的内在关联,助力理解面向对象编程的深层逻辑。
2026-09-18 22:00:00
197
1
原创 C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
文章从构造函数入手,介绍其概念、无参构造、默认构造、全缺省构造及默认构造对内置类型和自定义类型的处理差异;随后讲解析构函数的作用、特点及判断是否需要显式编写;接着重点剖析拷贝构造的概念、特征、浅拷贝与深拷贝的区别及典型调用场景;再介绍赋值运算符重载的格式、注意事项及与拷贝构造的区别,并补充前置++与后置++的重载方式;最后结合日期类实现,讲解流提取与流插入、获取某月天数、+=与+的区别、日期相减以及友元函数,并简要介绍 const 成员函数和取地址运算符重载。
2026-09-04 21:50:57
185
原创 C++篇:类和对象(上)
这里正式介绍一下什么是类。类有个关键字,还要有类名,{}里的是主体,可以包含函数,变量定义,类定义后面}有个分号不能省。类体中内容称为类的成员:变量称为成员变量;函数称为成员函数。int y;char c;这就是一个很普通的类,首先类体中要用成员函数和成员变量组成,最后有一个分号。然后需要注意的是要类可以两种定义方式,一种是声明和定义分离,一种是直接在类里面定义。
2026-08-27 01:00:00
248
5
原创 【C++入门】认识C++(上)
前一篇文是简单介绍了一下什么是 C++,以及为什么会用到 C++,它在生活中的应用范围之广。这篇文章就算是正式进入 C++ 的世界去初步认识,也就是摸一下它的外壳,认识它是如何对 C 语言的各种不足进行优化的,以及为类和对象铺路,那么正式开始本文的学习。每节课如果有必要的话我会放一个思维导图,思维导图是我学习 C++ 过程中必备的要素之一,用来总览全局和了解这个阶段我学了哪些知识点。
2026-07-29 02:00:00
268
5
原创 C++篇:C++
结束了C语言的学习之旅,我们是时候该进入C++的学习部分,C++是对C语言的承接部分,也就是说C++其实是兼容C语言的,那么什么是C++呢,以及C++到底是干嘛的,和C语言区别在哪里,接下来我们娓娓道来。
2026-07-01 15:40:39
537
4
原创 数据结构最终章:万字详解排序算法!(内部排序)
本文系统介绍了常见排序算法的原理、实现与优化方法。主要内容包括:1. 排序概念及应用场景;2. 四大类排序算法详解:插入排序、选择排序、交换排序、归并排序;3. 各算法的时间/空间复杂度分析及稳定性比较;4. 实际应用中的算法选择策略。重点解析了快速排序的三种实现方式(及其优化技巧。文章最后总结了不同规模数据适用的排序算法,为实际应用提供参考。
2026-04-13 22:21:03
497
7
原创 树:二叉树的认识(上)
本文介绍了树结构的基本概念及其在数据结构中的应用。文章还介绍了二叉树的两种存储结构(顺序和链式),其中层序遍历部分特别说明了借助队列实现的广度优先搜索方法。最后提及了后续将探讨的二叉树计算问题和堆结构应用。
2026-02-24 12:01:34
979
4
原创 数据结构入门:栈与队列
本文详细介绍了栈和队列两种线性数据结构的实现原理。栈采用后进先出(LIFO)原则,通过动态数组实现,包含初始化、压栈、出栈、判空等基本操作。队列采用先进先出(FIFO)原则,通过单链表实现,包含入队、出队、获取队头队尾元素等功能。文章重点分析了栈顶指针初始化差异(0或-1)的影响,以及队列通过封装链表节点实现的操作细节。两种数据结构均提供了完整的C语言实现代码和测试用例,并强调了内存管理和边界条件处理的重要性。通过形象比喻和代码示例,帮助读者理解这两种基础数据结构的核心概念和实现方法。
2026-01-30 14:18:43
1224
6
原创 双链表:比单链表更高效的增删查改
本文主要介绍了双链表(带头双向循环链表)的特点和实现方法。相比单链表,双链表通过增加前驱指针和循环结构,解决了单链表尾插尾删效率低的问题。文章详细分析了双链表不需要二级指针的原因,并给出了完整的代码实现,包括初始化、增删查改等基本操作。
2026-01-17 20:58:28
736
4
原创 数据结构篇:线性表的另一表达—链表之单链表(下篇)
之前是讲述了单链表的头插尾插,头删尾删函数部分,并且揭示了链表相对于顺序表的优势性。更重要的是对于next的理解和对二级指针的理解,为什么在单链表中用一级指针报错而要用二级指针,其实简单的说就是看会不会改变指针指向。
2025-04-30 22:47:42
1214
14
原创 数据结构篇:线性表的另一表达—链表之单链表(上篇)
那么我们就会引入链表,链表相较于顺序表到底有哪些优势?又有哪些劣势,本次blog带你一探究竟,但是可以说,链表和顺序表没有那个更好,只是在实际应用中由于特性不同,所以使用场景不同。试想一下,如果这两个有哪个更好的说法,那不是另外一个要被替代了,很显然不是。
2025-04-09 21:37:16
1250
9
原创 数据结构篇:通讯录的底层竟是顺序表?(上)
本章内容并不晦涩难懂,理解内存动态管理,了解通讯录就可以。其实顺序表的结构和通讯录撰写的结构差不多,可以说通讯录的底层实现逻辑就是顺序表。只是通讯录多了个框架。每篇文章都强调两个东西,调试和画图,不画图的话是不好写出来的,写出来了也是事倍功半。
2025-03-30 21:25:12
1231
15
原创 数据结构篇:空间复杂度和时间复杂度
本篇文章数据结构的开篇,也是对C语言部分结尾的继承,属于是承上启下。什么是数据结构,什么又是算法。这两者为什么紧密相连?时间复杂度和空间复杂度是贯穿整个数据结构的内容。重要的是画图,调试!!!
2025-03-24 22:59:16
1468
18
原创 动态内存管理的了解及使用
从内存区域上来看,一般的静态变量,比如int a;char c;int *p1;char *p2;double d;诸如此类都是在栈空间分配的,定义是不会变的,固定死的,使用完后由系统自动释放空间。而动态内存,是在堆区开辟的,由用户开辟,用户释放,系统不会主动进行释放操作。可以根据实际需求对内存分配进行扩大。
2025-03-06 18:53:53
1134
3
原创 通讯录的优化之存储信息部分(附完整代码)
承接上文,本篇是通讯录三部曲的最后一个部分,前面写了作为一个通讯录的基本部分增删查改和显示,但由于存在很多不足,所以上一篇进行了扩容部分的优化,那么这次要进行的是结束程序后的保存信息以及再一次运行程序时加载上一次保留信息部分。对一个简单的通讯录进行完善。
2025-02-27 18:05:39
1899
1
原创 通讯录的优化之扩容部分
通讯录的博客上次写了一个基础版,能够基本实现增删查改和在查看(显示)中进行排序了,但是仅有这些我认为是不太够的,所以本次对于通讯录的优化是检查扩容。
2025-02-19 21:00:00
2000
3
原创 对指针的深入运用-通讯录的初步实现
手机里的通讯录,是能够存放联系人的信息,包括姓名,性别,地址,电话号码,也可以加上性别。而且手机中的通讯录肯定有增删查改的功能,而且在list里是按照顺序排序的,可以按姓名的顺序来排,也可以选择其他的方式来排序。本次就来简单实现一下通讯录的基本功能。
2025-02-14 20:26:50
1115
1
原创 对sizeof 和strlen案例题的分析
上文主要讲述了sizeof和strlen在不同环境(不同数组)下的对比,这次更进一步,把理论实践化,用具体的笔试题目来强化对指针的运用度。
2025-02-07 10:37:25
679
2
原创 指针的进化—sizeof和strlen对比(字符串和字符数组的区分)
如果你对各个数组的内容存放是什么没有个清晰的概念,对指针偏移之后的数量算不出来或者模棱两可,那么本篇就来详细介绍sizeof和strlen来具象化的显示数组的内容存放了多少内容,偏移量变化后的变化,这个数组进行运算后会不会构成越界访问......看完这篇你就懂了。
2025-02-01 20:13:56
2393
原创 回调函数的应用(简单计算器的实现与qsort排序模拟)
承接上篇博客指针的进化—各类指针的概念的结尾,函数指针和函数指针数组的介绍,本文将详细描述如何使用函数指针数组来实现计算器,以及用回调函数来改造计算器和模拟qsort排序。干货满满!
2025-01-19 21:20:29
891
1
原创 了解初级指针
在计算机内存中,每个字节占用一个地址,在C语言中,为了能够方便快速的找到地址,产生了一个叫指针的名词,它指代的就是内存中的地址编号,
2024-12-03 14:50:57
1293
1
原创 函数的总结:递归与嵌套,递归思想,递归综合症?
本次内容是本人反复敲,反复出错后的经验贴,希望对还没遇到问题的有个提示作用,对有问题的能帮助到大家,程序猿的世界是奇妙的,需要不断去实践,才能出真知。
2024-11-01 17:42:35
2331
1
原创 随笔:对c语言分支循环的了解
if作为判断语句,表达式的0为假,不执行,表达式判断为非0才能继续执行。do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表 达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。至于for循环和while循环的break,就是中断语句,跳出循环的语句,continue语句,跳过本次循环,进入下一次,具体我也描述的不是很清楚,就不写了。最后提醒一下刚学c的朋友,其实实际操作写代码中,需要把for,while,if,语句互相结合才能解决问题,写出题目。
2024-10-16 19:57:41
408
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅