- 博客(30)
- 收藏
- 关注
原创 【C++ STL核心陷阱】迭代器失效:90%新手必踩的坑(vector/容器通用)
在上一篇掌握vector核心用法后,今天我们聚焦STL中最易出错、笔试/面试最高频的考点——迭代器失效。迭代器是STL容器的“通用访问工具”,但它并非“万能且安全”:当容器的底层内存发生变化(如扩容、删除元素),迭代器会变成“野迭代器”(指向无效内存),此时使用迭代器会导致程序崩溃、输出乱码等未定义行为。本文将从「核心定义→失效原因→高频场景→解决方案→通用规则」,全方位拆解迭代器失效问题,帮你从“踩坑”到“避坑”,彻底掌握迭代器的安全使用方式。迭代器失效。
2026-03-22 12:51:17
366
原创 【C++ STL核心】vector:最常用的动态数组容器(第九天核心)
在前八天掌握了const修饰别名、模板、内部类、匿名对象等核心知识点后,第九天我们正式进入C++ STL(标准模板库)的学习——从最常用、最基础的容器vector开始。STL是C++的“宝藏工具库”,而vector是STL中最常用的容器,没有之一。它本质是动态数组,既能像普通数组一样随机访问,又能自动扩容,完美解决了普通数组“长度固定、扩容麻烦”的痛点。无论是笔试中的算法题(如排序、查找),还是项目中的数据存储,vector都是首选工具。
2026-03-18 21:23:32
516
原创 C++ string类模拟实现(完整版,含全运算符重载)
内存管理:string类底层是动态开辟的字符数组,核心是通过reserve统一管理扩容,避免频繁申请/释放内存;扩容策略为「初始4,后续2倍」,兼顾效率和内存利用率。深拷贝vs浅拷贝:拷贝构造和赋值重载必须实现深拷贝,否则多个对象会共用同一块内存,析构时重复释放导致程序崩溃;自赋值保护避免自身内存被误释放。运算符重载成员运算符重载(如[]、+=、==等):左操作数是当前对象(this指针),支持链式操作;
2026-03-18 16:50:43
520
原创 【C++类与对象进阶】第五天核心总结:static对象+初始化列表+const成员函数
第五天的学习聚焦C++类与对象的底层语法细节与高级特性,是衔接“基础类设计”与“继承多态”的关键桥梁。static对象(控制生命周期与作用域)、初始化列表(类构造的标准规范)、const成员函数(只读接口的安全保障)。本文将这三大知识点按「核心概念+语法规则+实战案例+避坑指南」的结构梳理,同时融入经典刷题场景(求1+2+...+n),让理论与实战深度结合,帮你彻底吃透第五天的重点内容。static对象让我们掌握了“生命周期与作用域”的控制技巧,实现了无循环的累加实战;初始化列表。
2026-03-02 21:38:34
986
原创 【C++类与对象】第三天+第四天知识点总结(const·静态·友元·继承·运算符重载)
本文系统梳理了C++类与对象的核心进阶知识,重点涵盖:1)类的高级特性:const成员函数的安全机制、static静态成员的共享特性、友元机制的特殊授权规则及继承基础;2)运算符重载实战:详细解析前置/后置++的标准写法、<<和>>重载的友元实现,强调返回引用实现连续输入输出的原理。文章提供了标准代码模板和易错点清单,包括const对象调用限制、静态成员初始化要求、运算符重载的最小惊讶原则等关键细节,可作为笔试面试的速查手册和项目开发的实用参考。
2026-03-01 21:47:00
872
原创 【C++新手入门】类的默认成员函数深度解析(拷贝构造/引用/this指针/赋值重载)
继第一天吃透类与对象基础后,第二天我们聚焦C++类的默认成员函数核心进阶知识点——拷贝构造函数、引用、this指针、赋值运算符重载,这些是解决“浅拷贝/深拷贝”“对象生命周期管理”的关键,也是新手最易踩坑的地方。本文以「生活化比喻+极简代码+避坑指南」的形式,梳理第二天的核心内容,适合新手复习巩固,也方便后续查阅。传值返回:返回“变量的副本”——就像复印文件给别人,别人改复印件不影响你的原件;引用返回:返回“变量的别名”——就像把文件的快捷方式给别人,别人改快捷方式指向的文件,你的原件也会变;地址返回。
2026-02-27 23:03:54
561
原创 【C++新手入门】类与对象核心知识点全解析(含构造/析构/重载/运算符重载)
本文通过生活化比喻和代码示例,系统讲解了C++类与对象的核心概念。主要内容包括:1)类与对象的关系(设计图纸与实物);2)访问权限控制(public/private);3)构造/析构函数(对象初始化和资源清理);4)函数重载与缺省参数的使用技巧;5)运算符重载实现自定义类型运算。文章特别强调新手易错点,如缺省参数设置顺序、重载函数优先级等问题,并提供汽车类的完整示例代码。这些基础知识点是掌握C++面向对象编程的关键,建议读者通过实践练习加深理解。
2026-02-26 20:00:20
716
原创 C语言位运算详解:从基础到实战,小白也能看懂 [特殊字符]
位运算的核心优势是「高效」,直接操作二进制位让它在底层开发和算法优化中不可替代。掌握6种核心运算符的规则,记住「与清0、或置1、异或翻转」的口诀,再结合实战案例多练习,就能轻松搞定这个知识点!👇#C语言 #位运算 #嵌入式开发 #底层编程 #C语言进阶 #程序员面试。
2026-01-08 01:15:21
934
原创 C语言实现栈详解:从概念到完整代码 [特殊字符]
首先要定义栈的结构体,包含两个核心部分:数组:用来存储栈中的元素top:栈顶指针(其实是数组下标,标记栈顶元素的位置)为了让代码更灵活,我们用宏定义来指定栈的最大容量,后续修改起来更方便。代码如下:// 宏定义栈的最大容量// 定义栈的结构体// 存储栈元素的数组int top;// 栈顶指针(下标),初始为-1表示空栈} Stack;
2025-12-30 22:49:18
763
原创 C语言时间复杂度详解:从概念到实战(附实例)
时间复杂度(Time Complexity)本质是算法执行时间与输入规模的增长关系,它不计算具体的执行时间,而是描述当输入数据量n增大时,算法执行步骤的增长趋势。为什么不用具体时间衡量?因为不同设备(CPU、内存)的运行速度不同,同样的算法在不同机器上执行时间差异很大。而时间复杂度能剥离硬件影响,直接反映算法的“效率好坏”。在C语言中,我们分析时间复杂度,主要关注循环语句、递归调用等重复执行的代码块——这些是消耗时间的核心部分。
2025-12-28 14:45:41
703
原创 C语言双链表保姆级教程|从原理到实操全攻略[特殊字符]
先定义节点类型,包含数据域和两个指针域:// 定义双链表节点结构int data;// 数据域(存储数据)// 前驱指针// 后继指针💡 小提醒:typedef 后,DNode 是节点类型名,DLinkList 是节点指针类型名,写代码更简洁~🔸 双链表节点有两个指针,支持双向遍历,插入删除更高效;🔸 带头节点的双链表能避免很多边界问题,优先使用;🔸 插入/删除核心:先处理新节点/删除节点的指针,再处理前后节点的指针,避免断链;🔸 记得释放节点内存,防止内存泄漏!
2025-12-23 23:16:01
1175
原创 C语言环形链表实战:从基础使用到牛客网约瑟夫问题破解
环形链表是线性链表的一种特殊形式,区别于单链表“尾节点指针指向NULL”的特点,环形链表的尾节点指针会指向头节点,形成一个闭合的环🔄。这种结构的优势在于:从任意节点出发都能遍历整个链表,适合解决“循环计数”类问题(比如约瑟夫问题、循环队列等)。环形链表分为两种:单向环形链表:只有一个方向的指针,尾节点指向头节点双向环形链表:每个节点有前后两个指针,头节点的前驱指针指向尾节点,尾节点的后继指针指向头节点今天咱们重点讲“单向环形链表”,因为它足以解决约瑟夫问题,且实现更简单。
2025-12-22 23:50:52
702
原创 C语言单链表核心操作全解析:初始化、销毁与常用接口实现
数据域(存储数据)和指针域(存储下一个节点的地址)。代码定义如下(通用模板):💡 说明:typedef的作用是简化类型名,后续定义链表指针时,用LinkList即可替代struct ListNode*,代码更简洁。本文核心讲解了C语言单链表的初始化(带头节点)和销毁(避免内存泄漏)操作,搭配尾插、头插、遍历等辅助接口,形成了完整的链表操作闭环。新手学习时,建议重点理解二级指针的使用场景和内存释放的逻辑,多动手运行代码,观察链表节点的地址变化,就能快速掌握。如果有疑问,欢迎在评论区交流~ 👇。
2025-12-21 23:12:41
756
原创 C语言基于顺序表实现通讯录:从原理到实战运用
本文通过顺序表实现了通讯录的核心功能,从结构体设计到函数实现,再到主菜单交互,完整覆盖了小型项目的开发流程。顺序表的“数组存储”特性让通讯录的随机访问更高效,但也存在容量固定的缺陷,适合入门学习数据结构的实际应用。如果需要进一步优化,可以尝试实现动态顺序表、数据持久化或更高效的查找算法,欢迎大家在评论区交流讨论!#C语言 #数据结构 #顺序表 #通讯录实现 #C语言实战项目。
2025-12-20 18:02:14
303
原创 C语言动态顺序表核心操作详解:初始化、销毁与头尾增删
动态顺序表的核心是通过指针指向动态开辟的数组,同时记录当前存储的数据个数(有效长度)和数组的最大容量,结构定义如下:💡 说明:使用typedef重定义结构名和数据类型,后续使用和修改时更便捷,比如想存储char类型,只需修改SLDataType为char即可。
2025-12-20 00:47:55
1569
原创 【C 语言进阶】一篇吃透预处理!从基础到实战全解析 ✨
在 C 语言程序编译前,编译器会先执行一个 “预处理阶段”—— 由预处理器对代码中的 “预处理指令” 进行处理,比如替换宏、包含头文件等。处理完成后,才会进入真正的编译、汇编和链接环节。简单说:预处理 = 编译前的 “代码改造”,目的是让代码更灵活、易维护!作用:定义 “宏”—— 可以是常量、表达式,甚至是代码片段,预处理时会直接替换。格式:#define 宏名 宏值注意:末尾不要加;,否则会被一起替换!示例#define PI 3.1415926 // 定义圆周率常量。
2025-12-17 23:17:20
955
原创 sizeof 核心原理:编译期的 “内存大小计算器”
sizeof 是 C 语言的(非函数),核心作用是计算「数据类型或变量」的,结果在编译时就已确定,与运行期逻辑无关。
2025-12-17 17:17:15
392
原创 【C 语言进阶】一文吃透文件指针与偏移量的核心关系
文件指针本质是FILE*类型的变量,但不用死记定义,我们用生活场景类比:把文件想象成一本 “字节组成的书”,文件指针就是你 “阅读 / 写字时的手指”—— 它永远指向下一次要操作的字节位置。比如你用手指指着书中某一行的某个字,“手指” 就是文件指针,“字的位置” 就是指针对应的字节偏移量。为了方便记忆,我们把核心概念和关系整理成表格:概念本质核心关系关键操作文件指针操作文件的 “光标”(FILE*)指向某个偏移量对应的字节位置fopen创建,fclose销毁偏移量。
2025-12-16 21:22:52
920
原创 【C 语言进阶】一文吃透文件读写:从基础到实战,附完整代码示例 [特殊字符]
C 语言文件读写的核心是 “指针 + 函数 + 模式用fopen()打开文件,获取文件指针,务必判断是否为NULL;根据文件类型(文本 / 二进制)选择对应的读写函数(fgetc/fputs 或 fread/fwrite);操作完成后,用fclose()关闭文件,释放资源;注意处理边界情况(如文件末尾、操作失败),避免程序崩溃或数据丢失。掌握这些内容后,你就能轻松应对 C 语言开发中的文件操作场景啦!如果有疑问,欢迎在评论区留言讨论~ 💬。
2025-12-16 17:01:55
778
原创 【C 语言进阶】一文吃透动态内存分配:从原理到实战避坑
动态内存分配是 C 语言灵活性的核心体现,但也是易错点。4 个核心函数的分工:malloc(申请)、calloc(申请 + 清零)、realloc(调整)、free(释放);3 个必须规避的坑:内存泄漏、野指针、越界访问;谁申请,谁释放,确保每一块动态内存都有明确的释放逻辑。多写代码实战,结合调试工具(如 GDB)观察内存变化,就能彻底掌握动态内存分配!
2025-12-14 10:21:43
578
原创 【C 语言实战】从零实现控制台贪吃蛇游戏,附完整代码与思路解析 [特殊字符]
首先定义游戏所需的全局变量,比如蛇的坐标、食物位置、得分、方向等,避免频繁传参:’
2025-12-12 21:23:51
1780
原创 深入理解 C 语言自定义类型:概念、特性与实战案例
结构体是 C 语言中最常用的自定义类型,它允许我们将不同类型的数据(如整数、字符、数组甚至其他结构体)组合在一起,形成一个新的、具有特定含义的数据类型。例如,要描述一个 “学生”,需要包含学号(int)、姓名(char数组)、年龄(int)、成绩(float)等信息,这些分散的数据就可以通过结构体整合为一个统一的 “学生类型”。结构体的定义格式如下:// 定义结构体类型(struct 结构体名)struct 结构体名 {数据类型1 成员名1;数据类型2 成员名2;// ... 更多成员。
2025-12-12 21:15:01
1238
原创 数组指针、指针数组与函数指针:图文详解 + 实战案例
概念本质通俗理解语法格式指针数组数组(元素是指针)“装指针的数组”类型 *数组名[数组长度];数组指针指针(指向数组)“指向整个数组的指针”类型 (*指针名)[数组长度];本质不同:指针数组是 “数组”,数组指针是 “指针”;优先级差异:[] 高于 *,无括号时默认是指针数组;步长不同指针数组的步长 = 单个指针的大小(32 位 4 字节,64 位 8 字节);数组指针的步长 = 指向数组的总大小(如 int (*p)[5] 的步长是 20 字节);访问方式。
2025-12-04 12:35:03
861
原创 深入理解 C 语言文件操作:fread 与 fwrite 全解析
fread 和 fwrite 是 C 语言二进制文件操作的核心函数,其优势在于高效、直接、支持复杂数据类型。掌握它们的关键在于:理解 size 和 nmemb 的区别,避免参数混淆;严格检查返回值,处理错误和文件尾场景;注意二进制模式、结构体对齐、跨平台字节序等细节;批量操作和合理设置缓冲区,优化性能。无论是嵌入式开发中的数据存储、PC 端的文件解析,还是网络编程中的数据传输,fread/fwrite 都是不可或缺的工具。
2025-12-03 16:44:33
1756
原创 形象记忆随机数代码
用当前时间当密码(srand (time (NULL))),启动抽奖机(rand ()),截出想要的号码段(公式)”—— 搞定!
2025-12-03 15:56:11
164
原创 文件读取函数-fgets详解
fgets是 “按行读、带换行、自动加结束符” 的读取工具,像 “用勺子舀汤,要么舀满一勺(num-1个字符),要么舀到碗底(EOF),要么舀到碗边(换行符),还会自动在勺子里加个‘封口盖’(\0)”。
2025-12-02 16:44:57
461
原创 C 语言文件操作核心函数
whence:SEEK_SET (文件头)/SEEK_CUR (当前)/SEEK_END (文件尾)mode:"r" 读 /"w" 写(覆盖)/"a" 追加 /"rb"/"wb" 二进制模式。(自动加 '\0')(EOF 表示结束)等价于fseek(fp, 0, SEEK_SET)获取当前指针位置(相对于文件头的字节数)1 表示已到末尾,0 表示未到。读取一行字符串(含换行)打开文件,返回文件指针。写入字符串(不含换行)返回 - 1 表示失败。打印文件操作错误信息。
2025-12-02 16:03:09
747
原创 编程新手初帖
大家好,我是来自双非院校的计算机相关专业学生(或自学编程的跨专业学生)。虽然学校背景普通,但对技术充满热情,喜欢钻研问题并通过代码实现想法。目前正在系统学习编程基础,希望未来能在IT行业找到自己的方向。
2025-11-29 10:12:53
155
原创 初试指针(C语言)
本文介绍了指针的基本概念与应用。指针是存储内存地址的变量,用于直接访问数据。文章讲解了指针的声明与初始化、解引用操作、与数组的关系、动态内存分配(malloc/free)以及作为函数参数的用法。同时强调了使用指针时的注意事项,包括避免野指针、内存泄漏和越界访问等问题。通过实践和调试可逐步掌握指针的正确使用方法。
2025-11-28 18:29:42
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅