- 博客(62)
- 收藏
- 关注
原创 【C++】map和set的使用
本文介绍了C++中map和set的使用方法及其特性。作为关联式容器,它们基于红黑树实现,提供O(logN)的查找效率,并能自动维护数据有序性。文章详细讲解了set/multiset和map/multimap的主要操作,包括构造、插入、删除、查找等,通过代码示例展示了它们的用法差异,特别说明了multiset支持重复值的特性。这些容器在需要高效查找和自动排序的场景中具有重要应用价值。
2025-11-16 18:26:26
1524
16
原创 【把Linux“聊”明白】进程的概念与状态
本文介绍了Linux进程的基本概念与管理机制。首先解释了进程是程序执行实例,内核通过PCB(进程控制块)以结构体形式描述进程属性,并组织为链表进行管理。文章详细讲解了查看进程的两种方法:/proc系统文件夹和ps/top命令,并演示了通过系统调用获取进程ID和创建子进程的过程。重点分析了fork函数的工作原理,包括其两个返回值的含义,以及进程独立性的体现。最后简要提及进程状态的基本分类。本文为理解Linux进程管理提供了基础性介绍,适合操作系统初学者阅读。
2025-11-12 17:21:52
1867
27
原创 【把Linux“聊”明白】从冯诺依曼架构到操作系统
摘要 本文从计算机基础架构出发,首先介绍了冯诺依曼体系结构的五大组成部分及其工作原理,解释了CPU通过内存而非直接访问磁盘的关键设计思想。然后阐述了操作系统作为软件与硬件间的桥梁,其核心"先描述,再组织"的管理理念,通过结构体描述对象、数据结构组织对象的方式进行高效资源管理。最后说明了系统调用与库函数的关系,操作系统通过暴露接口和封装功能为开发者提供服务。全文揭示了计算机系统从底层架构到上层管理的设计逻辑,为理解操作系统特别是Linux系统奠定了理论基础。
2025-11-10 20:51:18
1923
19
原创 【把Linux“聊”明白】自动化构建-make/Makefile详解
本文详细介绍了Linux开发中make和Makefile的自动化构建工具。Makefile通过定义依赖关系和依赖方法,实现项目的自动编译和清理,极大提升开发效率。文章从基本概念出发,讲解了依赖关系、依赖方法、项目清理以及.PHONY伪目标的作用,并通过代码示例展示了如何编写适用于单文件和多文件项目的Makefile。此外,还深入分析了make工具的工作原理和推导过程,帮助开发者理解自动化构建的底层机制。掌握make和Makefile是Linux开发者的必备技能,能够显著优化编译流程,提高开发效率。
2025-11-09 16:55:05
1763
21
原创 【把Linux“聊”明白】编译器gcc/g++与调试器gdb/cgdb:从编译原理到高效调试
本文系统介绍了Linux环境下C/C++开发的必备工具链。第一部分详细讲解gcc/g++编译器,包括预处理(-E)、编译(-S)、汇编(-c)和链接的完整编译流程,以及静态链接和动态链接的区别与实现方式。通过实例演示了静态库(.a)和动态库(.so)的创建与使用差异。 第二部分专注于调试技术,介绍gdb和cgdb调试器的核心功能,包括断点设置、变量查看、代码跟踪等调试技巧。文章还提供了gcc常用选项参考表,帮助开发者快速掌握编译参数。
2025-11-07 20:24:09
1400
15
原创 【把Linux“聊”明白】vim编辑器完全指南
本文全面介绍了Vim文本编辑器的使用方法,包括三种主要模式(命令模式、插入模式和底行模式)及其切换方式,详细讲解了各类操作指令。在命令模式下,用户可以通过快捷键移动光标、删除/复制文本、替换字符和撤销操作;底行模式支持查找替换、多文件操作和保存退出等高级功能。文章还演示了块视图模式下的多行注释操作技巧,并提供了vim配置建议,帮助读者提升编辑效率。掌握这些技巧后,用户能够更高效地使用这款强大的Linux文本编辑器。
2025-11-05 17:11:54
1595
33
原创 【把Linux“聊”明白】权限的本质与管理全解
Linux权限的本质与管理全解 本文从Linux用户分类和权限基础概念出发,详细介绍了权限管理的核心内容。首先讲解了超级用户和普通用户的区别,以及用户切换命令su和su-的使用方法。随后深入剖析了Linux权限的本质,即"角色+目标权限属性"的组合,具体包括文件所有者、所属组和其他用户的权限分类,以及读(r)、写(w)、执行(x)三种基本权限。 文章重点讲解了权限设置方法,包括chmod命令的字符表示法和8进制数值表示法,以及chown和chgrp命令的使用。通过多个实例演示了如何修改文
2025-11-03 19:13:14
1886
30
原创 【把Linux“聊”明白】Linux的环境搭建
本文介绍了Linux环境搭建的三种主要方式:双系统、虚拟机和云服务器,重点推荐新手使用云服务器+Xshell远程连接的方案。文章详细讲解了腾讯云服务器的购买流程,包括选择配置、修改密码等关键步骤,并提供了Xshell的安装和使用教程,指导读者如何通过SSH连接远程服务器。最后强调了云服务器方案的稳定性优势,并鼓励读者点赞、收藏和关注以获取后续更新内容。整体内容简洁实用,适合Linux初学者快速搭建学习环境。
2025-10-31 10:08:24
2148
9
原创 【数据结构】二叉搜索树
二叉搜索树摘要 二叉搜索树(BST)是一种高效的数据结构,通过左子树节点值≤根节点≤右子树节点的规则实现快速查找、插入和删除。其性能取决于树的高度:最优情况为O(logN)(完全二叉树),最差退化为O(N)(单支树)。相比二分查找,BST支持动态操作但需平衡机制(如AVL、红黑树)保证效率。核心操作包括:基于比较的插入(O(h))、查找(O(h))和删除(分四种情况处理,最复杂的是替换法删除左右非空节点)。BST在内存数据管理中具有独特优势,是高级数据结构的基础。
2025-10-27 20:09:49
2203
19
原创 【C++】多态
本文深入探讨了C++多态的核心概念与实现机制。多态分为编译时多态(函数重载/模板)和运行时多态(虚函数重写),重点分析了运行时多态的两大关键条件:基类指针/引用调用虚函数,以及派生类完成虚函数重写。通过购票示例和虚函数表原理图,阐释了多态"同一接口不同行为"的特性。文章还详解了虚函数重写中的特殊情形(协变、析构函数重写),并指出基类析构函数必须设为虚函数以避免内存泄漏。最后介绍了C++11的override/final关键字,帮助开发者更安全地实现多态。
2025-10-24 12:34:03
2302
39
原创 【C++】继承
本文深入探讨C++面向对象编程中的继承机制。继承允许在保持原有类特性的基础上进行扩展,实现代码复用和层次化设计。文章首先通过Student和Teacher类的例子展示了继承的优势,对比了冗余代码与复用公共成员Person类的差异。详细介绍了继承的定义格式、三种继承方式(public/protected/private)及其对基类成员访问权限的影响规则。特别强调了private继承的局限性及实际应用中的注意事项。文中还通过stack继承vector的类模板案例,解释了模板按需实例化的特性及解决方法。
2025-10-20 17:35:51
2351
43
原创 【C++】priority_queue和deque的使用与实现
本文介绍了C++ STL中的priority_queue和deque容器适配器。priority_queue基于堆结构实现,默认使用vector作为底层容器,提供大顶堆功能,可通过greater比较器改为小顶堆。文章展示了priority_queue的基本用法,包括自定义类型比较重载,并详细解析了其模拟实现过程,包括向下调整(heapify)和向上调整算法。deque部分(未完整展示)则作为双端队列,支持高效的头尾插入删除操作。这两种容器适配器分别适用于需要优先级管理和双向操作的不同场景。
2025-10-15 20:16:09
2540
43
原创 【C++】stack与queue的使用与模拟实现
本文介绍了C++ STL中的stack和queue容器适配器,对比了它们与普通容器的区别。文章首先通过示例代码展示stack的基本用法,包括push、pop、top等操作,并给出LeetCode「用栈实现队列」的解题代码。接着详细讲解了如何用vector和list分别模拟实现stack和queue,重点分析了queue选用list而非vector作为底层容器的原因(时间复杂度考量)。最后指出STL中实际使用deque作为底层容器,为后续文章埋下伏笔。全文强调多练习使用STL组件的重要性,并提供了相关学习资源
2025-10-07 15:01:45
2901
39
原创 【C++】list的使用与模拟实现
本文介绍了C++ STL中list容器的使用与模拟实现。list作为双向链表容器,与vector的动态数组结构不同,具有独特的插入删除优势。文章首先通过文档介绍list的基本用法,包括构造、迭代器分类等,重点讲解了list迭代器失效问题。随后详细展示了list的模拟实现过程,包括节点封装、迭代器封装(通过模板参数实现iterator和const_iterator的复用)以及list主框架设计。通过对比vector,突出了list作为链表结构的特点,并提供了完整的代码示例,帮助读者深入理解list的底层实现原
2025-10-03 13:07:23
2262
41
原创 【C++】vector的使用与模拟实现
摘要:本文介绍了C++ STL中的vector容器及其实现原理。首先讲解了vector的基本使用。最后简要提及了vector的底层实现思路,为后续模拟实现打下基础,帮助读者深入理解这个高效动态数组的工作原理。
2025-09-27 14:31:16
1395
38
原创 【C++】string的使用与模拟实现
本文介绍了 string 类的常用接口,并重点完成了其模拟实现。通过亲手实现拷贝构造、赋值重载等函数,深入理解了深浅拷贝的区别和现代写法的优势。掌握 string 的底层原理对理解 C++ 的面向对象特性和内存管理机制至关重要。
2025-09-21 18:50:43
1769
39
原创 【C++】模板进阶
模板进阶摘要 本文深入探讨C++模板的进阶特性,主要包括: 非类型模板参数:允许使用常量作为模板参数,但仅限于能在编译期确定结果的整型常量,不支持浮点数、类对象等。 模板特化: 函数模板特化:针对特定类型提供特殊实现,但通常更推荐直接重载函数 类模板特化:包括全特化(所有参数特化)和偏特化(部分参数特化或增加约束条件) 应用示例展示了如何通过特化正确处理指针比较的场景 模板分离编译问题:分析了模板声明与定义分离可能导致链接错误的原因,这是模板使用中常见的陷阱。
2025-09-18 19:59:22
2085
40
原创 【C++】模板初阶
本文介绍了C++模板的基础知识,重点讲解函数模板和类模板的使用。函数模板通过泛型编程实现代码复用,可自动生成不同类型参数的函数版本;类模板允许定义通用的类结构,实例化时指定具体类型。文章分析了模板的原理、实例化方式及匹配规则,并指出模板在减少代码冗余、提高可维护性方面的优势。同时提醒类模板的定义和声明不宜分离,避免链接错误。模板是C++泛型编程的核心技术,为后续学习STL等高级特性奠定基础。
2025-09-14 17:00:48
1720
47
原创 【C++】内存管理
C++内存管理是程序员必须掌握的核心技能。与C语言的malloc/free不同,C++的new/delete不仅能分配内存,还能自动调用构造函数和析构函数,为面向对象编程提供支持。new/delete操作内置类型时类似于malloc/free,但操作自定义类型时会调用构造/析构函数。底层通过operator new和operator delete实现,前者基于malloc申请空间并处理异常,后者最终调用free释放空间。对于内置类型,new/delete与malloc/free功能相似;对于自定义类型,ne
2025-09-09 20:57:57
2087
43
原创 【C++】类与对象(中)
类与对象(中)摘要 本文深入探讨了C++中类的默认成员函数,重点分析了构造函数、析构函数和拷贝构造函数。默认成员函数是编译器自动生成的6个特殊函数,理解它们的行为和实现方式对面向对象编程至关重要。 构造函数负责对象初始化,具有自动调用、可重载等特点;析构函数用于资源清理,在对象销毁时自动调用;拷贝构造函数处理对象复制,必须使用引用参数以避免无限递归。对于包含资源的类,必须自定义析构函数以防止内存泄漏。文章通过Stack和Date类示例,详细说明了这些函数的使用场景和注意事项,帮助读者掌握C++面向对象编程的
2025-09-04 15:40:22
5500
47
原创 【C++】类与对象(上)
本文介绍了C++中类与对象的基础知识。主要内容包括:类的定义格式、访问限定符(public/protected/private)的作用、类域的概念;类的实例化过程,通过设计图与房子的比喻说明类与对象的关系;对象内存模型的分析,指出对象中只存储成员变量,成员函数存储在代码段;最后通过示例验证了空类对象占1字节的特殊情况。这些内容为理解面向对象编程的核心概念奠定了基础,是学习C++类与对象的重要入门知识。
2025-08-29 15:21:23
2424
46
原创 【C++】C++入门基础:从 Hello World 到命名空间与函数重载的系统学习
本文系统介绍了C++的入门基础知识,包括: 第一个C++程序"Hello World"的实现 命名空间(namespace)的概念、定义与三种使用方式 C++的输入输出流(cin/cout)及其与C语言printf/scanf的区别 通过示例代码演示了变量定义、输入输出操作 重点讲解了namespace的作用是解决命名冲突,可以定义变量/函数/类型,支持嵌套和多文件合并等功能。文章还比较了C++与C语言在基础语法上的异同,帮助初学者建立对C++核心概念的系统理解,为后续深入学习函数重载、
2025-08-28 16:06:07
1887
57
原创 【算法】一文看懂快速排序!!!
快速排序是一种基于分治思想的高效排序算法,核心思想是选取基准值将数组划分为两部分,比基准值小的放左边,大的放右边,然后递归处理子区间。文章详细介绍了Hoare、挖坑法和前后指针三种划分方式,并分析了Hoare版本的关键问题。针对快排的优化策略包括三数取中法选择基准值、小区间转插入排序以及三路划分等。此外还讲解了非递归实现方法,通过栈模拟递归过程。快排平均时间复杂度为O(N log N),但不稳定且极端情况下可能退化到O(N²),需要根据场景选择合适的优化方案。
2025-08-26 20:31:03
1693
64
原创 【数据结构】二叉树的顺序存储、堆的实现及其应用:堆排序与Top-K问题
本文介绍了二叉树的顺序存储结构及其重要应用——堆的实现。文章首先阐述了顺序存储适合完全二叉树的特性,随后详细讲解了堆的概念、大根堆与小根堆的区别,以及堆的基本性质。在实现部分,作者提供了堆的结构定义、初始化、销毁等基础操作,重点讲解了堆插入时的向上调整算法和删除堆顶元素时的向下调整算法。文章还通过图示和代码示例演示了如何从无序数组创建堆。最后,作者指出堆排序和Top-K问题是堆的两个典型应用场景,为后续内容埋下伏笔。全文结构清晰,代码示例详实,为读者理解堆的实现和应用提供了系统指导。
2025-08-24 13:41:17
1523
94
原创 【数据结构】树与二叉树:结构、性质与存储
本文系统介绍了树与二叉树的基本概念、性质及存储结构。树是一种非线性数据结构,具有层次关系,包括根节点、子节点、度等基本概念。二叉树是树的特殊形式,每个节点最多有两个子节点,包括满二叉树和完全二叉树两种特殊类型。文章详细讲解了二叉树的性质,如节点数量关系、深度计算等,并介绍了顺序存储和链式存储两种实现方式。链式存储通过二叉链或三叉链表示节点关系,顺序存储则适用于完全二叉树。这些基础概念为后续学习更复杂的树形结构奠定了重要基础。
2025-08-21 21:17:01
1658
75
原创 【数据结构】栈与队列:数据结构中的双生子
本文介绍了两种基础数据结构:栈(Stack)和队列(Queue)。文章详细讲解了它们的实现原理和C语言代码实现,包括初始化、容量检查、插入删除等核心操作。
2025-08-17 15:05:46
1406
71
原创 【算法】带环链表详解:环形链表检测与入环节点查找
摘要: 本文深入解析带环链表的核心问题,包括环形链表的检测与入环节点定位。通过快慢指针的数学证明,验证了slow走1步、fast走2步必然相遇的原理,并探讨了fast走更多步时的相遇条件。对于环形链表II,揭示了入环节点定位的数学本质:相遇点到入环点的距离等于头节点到入环点的距离。文章结合图示和代码实现,为算法学习与面试准备提供了清晰的理论指导和实践参考。
2025-08-14 20:18:13
1190
49
原创 【数据结构】链表核心解密:动态内存的艺术与高效增删的终极指南
摘要: 本文深入探讨了链表数据结构及其实现。链表采用非连续的动态内存管理,通过指针链接实现逻辑连续性,相比顺序表在频繁增删场景下更具优势。文章详细解析了单链表的结构设计,包括节点定义(数据域+指针域)和核心操作实现:创建节点、打印链表、头部/尾部插入删除、查找节点及指定位置插入。通过C语言代码示例,展示了如何利用指针操作实现链表的动态内存分配与释放,特别强调了二级指针在修改链表头节点时的关键作用。文章还对比了链表与顺序表的内存特性,指出链表节点在堆上动态分配可能不连续的特点。
2025-08-14 09:24:12
1271
50
原创 飞算JavaAI深度解析:专为Java生态而生的智能引擎
飞算JavaAI:革新Java开发的智能助手 飞算JavaAI是全球首款专注Java语言的智能开发工具,通过自然语言输入实现全流程自动化开发。其核心优势包括:基于10亿行Java代码训练的垂直优化模型,代码直接可用率达82%;支持从需求分析到代码生成的全流程引导;内置企业级特性如高并发处理和分布式事务;提供本地化安全部署方案。 安装仅需3分钟,支持IntelliJ IDEA插件集成。实战测试显示,它能自动生成电商系统表结构、接口代码及分布式事务处理逻辑。与主流工具对比,飞算JavaAI在Java深度优化、全
2025-08-08 20:02:08
1685
34
原创 【数据结构】数据结构入门:顺序表详解与实践指南
本文全面介绍了顺序表的概念、分类及实现方法。顺序表作为线性表的一种,在逻辑和物理结构上都是连续的,可分为静态和动态两种类型。动态顺序表通过扩容机制解决了静态顺序表空间浪费或不足的问题。文章重点讲解了动态顺序表的C语言实现,包括初始化、销毁、增删改查等基本操作,并提供了完整的代码示例。顺序表是数据结构学习的重要基础,掌握其原理和实现能为后续复杂数据结构的学习打下坚实基础。
2025-08-08 14:35:51
1124
46
原创 【C语言】预处理详解
C语言预处理机制详解 本文全面介绍了C语言预处理阶段的关键概念和实用技巧,主要内容包括: 预定义符号:介绍了C语言内置的__FILE__、__LINE__等预定义符号及其用法 #define定义常量:讲解了基本语法和使用注意事项,通过预处理阶段代码替换实例展示原理 宏定义:详细解析了带参数宏的定义方法,重点强调括号使用对运算优先级的影响 副作用问题:通过实例演示宏参数带副作用时可能产生的意外结果 替换规则:系统阐述了宏替换的三个关键步骤:参数预扫描、参数替换和宏体展开 与函数对比:从执行效率、类型通用性、调
2025-08-01 16:49:46
1314
27
原创 【C语言】编译与链接全揭秘:从源代码到可执行文件
本文详细介绍了C语言程序从源代码到可执行文件的转换过程。文章首先区分了翻译环境和运行环境,重点解析了翻译环境的编译和链接两个阶段。编译阶段包含预处理、编译和汇编三个子过程,其中预处理处理宏定义和头文件包含,编译进行词法、语法和语义分析,汇编生成机器指令。链接阶段则解决多文件间函数和变量的地址引用问题。文章还简要说明了程序运行环境的基本要求,为读者理解C程序的完整生命周期提供了清晰框架。
2025-07-25 18:17:48
1068
4
原创 【C语言】深入解析文件操作:原理与实践
摘要:C语言文件操作指南 本文全面介绍C语言文件操作的核心知识,包括文件基本概念、分类、打开关闭方法及读写函数。主要内容包括:文件持久化的重要性、程序文件与数据文件的区别、二进制与文本文件的存储差异、标准流的概念、FILE结构体指针的使用、文件打开关闭模式(fopen/fclose)以及多种顺序读写函数(fgetc/fputc/fgets/fputs/fscanf/fprintf等)的应用场景。通过代码示例详细讲解文件操作流程,帮助开发者掌握C语言中数据持久化的关键技术,适用于不同水平的程序员学习和巩固文件
2025-07-25 12:50:18
919
1
原创 【C语言】内存操作函数完全指南!!!
本文深入解析了C语言中四大内存操作函数:memcpy、memmove、memset和memcmp。首先探讨了memcpy的基本使用和模拟实现,指出其在内存重叠时的未定义行为;接着详细分析了memmove函数如何安全处理内存重叠问题,并给出了完整的模拟实现方案;然后介绍了memset函数的使用方法和常见误区;最后讲解了memcmp函数的内存比较功能。通过原理分析、使用示例和模拟实现,帮助开发者掌握高效安全的内存操作技巧,特别针对内存重叠等复杂场景提供了实用解决方案。
2025-07-21 18:18:59
1209
2
原创 【C语言】字符串与字符函数详解(下)
本文深入讲解了C语言中常用的字符串处理函数,包括字符串比较函数strcmp/strncmp、字符串查找函数strstr、字符串分割函数strtok以及错误处理函数strerror/perror。通过详细的代码示例和模拟实现,帮助读者掌握这些关键函数的工作原理和使用方法。主要内容包括:strcmp函数的字符ASCII码比较原理;strncmp函数的前n个字符比较特性;strstr函数的子串查找实现;strtok函数的分割字符串功能及其注意事项;以及strerror函数将错误码转换为可读信息的功能。这些知识对提
2025-07-20 22:57:04
835
2
原创 【C语言】字符串与字符函数详解(上)
本文介绍了C语言中字符处理相关的库函数,主要包括字符分类函数(如islower、isalpha等)、字符转换函数(tolower、toupper)以及字符串函数(如strlen)。重点讲解了strlen函数的使用方法、注意事项及其模拟实现,并分析了const关键字和assert断言在函数参数保护和调试中的作用。文章还通过示例代码演示了如何将字符串中的小写字母转换为大写字母,帮助读者理解这些函数的实际应用场景。
2025-07-20 21:47:44
943
2
原创 【C语言】深入理解柔性数组:特点、使用与优势分析
C99标准引入的柔性数组是结构体中的特殊成员,它允许在结构体末尾定义未知大小的数组。柔性数组必须位于结构体最后,且前面至少有一个其他成员。使用时需配合动态内存分配,malloc分配的总内存应大于结构体本身大小。相比指针实现方式,柔性数组具有内存释放方便、访问速度快、减少内存碎片等优势,特别适合处理动态大小的数据结构。本文详细介绍了柔性数组的特点、使用方法及优势,并提供了典型代码示例,是C语言动态内存管理的高级应用技巧。
2025-07-18 23:42:57
1040
3
原创 【C语言】动态内存分配避坑指南:六大易错点解析与经典笔试题实战
C语言动态内存分配常见错误及解决方案 本文总结了C语言动态内存分配的六大常见错误及解决方案: NULL指针解引用:malloc失败返回NULL,需检查指针有效性 越界访问:严格校验访问范围,防止超出分配空间 释放非动态内存:仅对malloc/calloc/realloc返回的指针使用free 部分释放内存:必须传入原始地址,避免指针移动后释放 重复释放:释放后立即置空指针,free(NULL)是安全的 内存泄漏:确保每个malloc都有对应的free 文章还通过经典笔试题分析了常见陷阱,强调正确使用二级指针
2025-07-18 13:43:26
983
原创 【C语言】动态内存管理全解析:malloc、calloc、realloc与free的正确使用
本文深入讲解C语言动态内存分配的四大函数:malloc、calloc、realloc和free。首先分析静态内存分配的局限性,指出动态内存分配的必要性。重点介绍了malloc函数的使用注意事项及其配套的free函数的安全释放方法,强调必须检查返回指针是否为NULL。随后对比calloc与malloc的区别,说明calloc会自动初始化内存为0。最后详细解析realloc的两种扩展情况及其正确使用方法,特别提醒realloc返回新指针的安全处理方式。文章通过代码示例演示了各函数的正确使用方式,并总结了内存管理
2025-07-17 18:53:00
1358
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅