- 博客(126)
- 收藏
- 关注
原创 c语言(重点)
本文系统梳理了C语言核心知识点,涵盖指针与数组的深度解析、数据存储机制、编译链接过程等关键内容。重点剖析了数组指针与指针数组的区别,函数指针与回调机制的应用,以及结构体内存对齐规则。详细讲解了整数与浮点的存储格式(原/反/补码与IEEE754标准)、类型转换规则(提升与截断),以及预处理阶段(宏定义、文件包含、条件编译)的处理机制。最后完整呈现了从预处理到链接的编译全流程,包括中间文件生成、符号解析等关键技术环节,为深入理解C语言底层原理和高效编程提供了全面指导。
2025-06-09 19:39:24
591
10
原创 Linux进程控制
本文摘要:本文系统探讨了Linux进程管理中的进程终止机制,主要内容包括:进程退出场景:分为代码正常运行完毕(结果正确/不正确)和异常终止三种情况,重点分析了异常终止的信号机制和退出码含义;2.进程退出方法:详细对比了return、exit和_exit的区别,通过实例展示exit会刷新缓冲区而_exit直接终止的特性;3.进程等待机制:阐述wait/waitpid解决僵尸进程问题的必要性,解析status参数的位结构(异常信号+退出码);4.程序替换原理:通过exec系列函数实现进程内容替换而不
2025-06-07 20:48:45
680
23
原创 Linux进程概念
在32位的地址和数据总线--->没跟总线会发出强信号(1)和弱信号(0)两种电信号,形成类似于二进制的信息,操作系统会根据数据导线传输的32信号访问内存中对应的地址,电信号共2^32种。
2025-05-30 22:48:38
1189
29
原创 算法刷题记录:滑动窗口经典题目解析
本文介绍了三道使用滑动窗口技巧解决的算法题。1) 1004题通过维护最多k个0的窗口寻找最长连续1序列;2) 3题利用哈希表记录字符频率,寻找无重复字符的最长子串;3) 1658题将问题转化为求特定和的最长子数组,通过窗口求和来求最小操作数。每道题都提供了详细的解题思路和C++实现,展示了滑动窗口在不同场景下的应用技巧,包括边界调整、条件维护和结果更新等关键步骤。这些例题充分体现了滑动窗口在处理子数组/子串问题时的高效性。
2025-05-28 23:07:54
1194
25
原创 C++ 输入输出流示例代码剖析
本文深入解析C++中自定义类型与输入输出流的交互实现,重点探讨了类型转换操作符、输入输出操作符重载技术,以及文件二进制和文本读写方式。通过A类、Date类的类型转换和流操作重载示例,展示了如何增强自定义类型的兼容性;在文件操作部分,详细比较了二进制读写的高效性与文本读写的可读性差异,并以ServerInfo结构体和ConfigManager类为例说明实际应用场景。这些技术广泛应用于网络配置、日志记录等开发需求,是C++数据处理能力的核心体现。
2025-05-24 23:04:34
969
7
原创 C++ 内存管理与单例模式剖析
本文探讨了C++中特殊内存管理方式和单例模式的实现方法。首先介绍了HeapOnly类,通过私有构造函数和删除拷贝操作确保对象只能在堆上创建;其次讲解了StackOnly类,通过删除operator new强制对象只能在栈上分配。随后详细分析了单例模式的两种实现:饿汉模式在程序启动时即创建单例对象,实现简单但影响启动速度;懒汉模式延迟创建对象,但需处理多线程安全问题,并可通过GC类确保资源释放。这些技术为C++开发者提供了内存管理和设计模式的重要实践参考,需根据具体场景选择合适方案。
2025-05-24 15:48:49
1250
5
原创 C++ 类型转换
C++类型转换机制解析:从C语言到更安全的转换方式本文系统分析了C和C++中的类型转换机制。C语言提供隐式和显式两种类型转换,但存在可视性差、安全隐患等问题。C++为改进这些缺陷,引入了四种命名的强制类型转换操作符:static_cast用于相关类型转换、reinterpret_cast处理位模式转换、const_cast去除const属性、dynamic_cast实现安全的向下转型。文章还介绍了运行时类型识别(RTTI)机制,包括typeid运算符和decltype等特性。相比C语言的简单转换,C++的
2025-05-24 15:29:44
688
3
原创 C++智能指针
本文探讨了C++中的内存泄漏问题及其解决方案。内存泄漏发生在程序分配内存后未能正确释放,导致内存浪费和程序性能下降。文章通过示例代码展示了在异常处理不当或资源管理错误时可能发生的内存泄漏情况。为避免内存泄漏,建议采用RAII(资源获取即初始化)原则,使用智能指针如unique_ptr和shared_ptr来自动管理内存。unique_ptr通过独占资源并自动释放来防止内存泄漏,而shared_ptr通过引用计数机制共享资源,确保资源在不再被引用时释放。此外,文章还介绍了weak_ptr,它用于解决share
2025-05-23 17:13:01
1180
21
原创 深入探究C++11的核心特性
C++11标准引入了多项新特性,显著提升了语言的表达能力和开发效率。首先,统一的列表初始化扩展了花括号{}的使用范围,适用于所有内置和用户自定义类型,简化了初始化操作。其次,变量类型推导通过auto和decltype关键字,减少了代码冗余,提高了可读性。右值引用和移动语义优化了资源管理,减少了不必要的拷贝,提升了性能。此外,C++11还引入了lambda表达式,简化了匿名函数的定义,增强了代码的灵活性。新的类功能如默认成员函数、类成员变量初始化、以及强制生成或禁止生成默认函数的关键字,进一步增强了类的设计能
2025-05-22 18:44:33
1055
25
原创 布隆过滤器
布隆过滤器是一种高效的概率型数据结构,由Burton Howard Bloom在1970年提出,主要用于解决海量数据的存储和快速查询问题。它通过多个哈希函数将数据映射到位图结构中,实现高效的插入和查询操作。布隆过滤器的优点包括高查询和插入效率、节省内存空间、支持集合运算等,但也存在误判、无法获取元素本身和不支持直接删除等缺点。其应用场景广泛,如网页爬虫的URL去重、数据库中的数据判重和垃圾邮件过滤等。尽管有局限性,布隆过滤器在大数据处理等领域仍具有重要价值。
2025-05-19 17:16:41
1104
25
原创 深入理解位图(Bit - set):概念、实现与应用
位图(Bit-set)是一种高效的数据结构,特别适用于处理海量数据的存在性判断和统计。其基本原理是通过二进制位来表示数据的状态,1表示存在,0表示不存在。位图适用于快速查找、数据去重、统计、集合操作(如交集、并集)以及操作系统中的磁盘块标记等场景。通过C++代码示例,展示了位图的实现及其在快速查找、排序去重、集合操作和磁盘块标记中的具体应用。位图通过减少时间和空间复杂度,显著提升了数据处理的效率,是处理大规模数据时的有力工具。
2025-05-18 22:20:15
1307
28
原创 二叉树构造:从前序、中序与后序遍历序列入手
本文介绍了如何利用二叉树的遍历序列来构造二叉树,重点分析了LeetCode上的两道题目:从前序与中序遍历序列构造二叉树(题目105)和从中序与后序遍历序列构造二叉树(题目106)。通过这两道题,我们可以掌握利用不同遍历序列构建二叉树的方法。对于题目105,先序遍历的第一个元素是根节点,中序遍历中根节点左侧为左子树,右侧为右子树,通过递归构建整棵树。对于题目106,后序遍历的最后一个元素是根节点,同样通过中序遍历划分左右子树,递归构建。这两道题的核心思想是通过遍历序列确定根节点,划分左右子树,再递归构建,帮助
2025-05-18 15:35:29
1125
20
原创 哈希的原理、实现
哈希是一种在计算机科学中广泛应用的数据结构和算法思想,主要用于提高数据存储和查找的效率。本文详细探讨了哈希的基本原理、哈希函数的设计原则及常见类型(如直接定址法、除留余数法等),并介绍了哈希冲突的解决方法,包括闭散列(如线性探测和二次探测)和开散列(链地址法)。此外,文章还结合C++代码示例,展示了如何实现哈希表及其在unordered_map等关联式容器中的应用。哈希技术在海量数据处理、缓存系统和数据库索引等领域具有重要应用,合理使用哈希可以显著提升程序性能。通过本文,读者可以更深入地理解哈希的原理及其在
2025-05-17 18:09:29
1428
21
原创 红黑树解析
红黑树是一种自平衡的二叉搜索树,通过节点颜色(红或黑)和一系列性质确保树的近似平衡,从而在插入、删除和查找操作中保持高效。本文详细介绍了红黑树的概念、性质、节点定义与结构,并重点探讨了其插入操作的实现步骤,包括按照二叉搜索树规则插入新节点以及通过旋转和变色修复红黑树性质。此外,文章还展示了红黑树在C++标准模板库(STL)中模拟实现map和set容器的应用,通过红黑树的高效特性,这些容器能够快速、有序地存储和访问数据。通过深入理解红黑树的原理和实现,读者可以更好地应用这一数据结构解决实际问题。
2025-05-15 22:50:57
890
26
原创 AVL树解析
这段代码实现了一个AVL树的插入操作及其平衡维护机制。AVL树是一种自平衡二叉搜索树,通过旋转操作保持树的平衡。插入操作首先检查树是否为空,若为空则直接创建根节点。否则,通过遍历树找到合适的插入位置,并插入新节点。插入后,代码通过更新节点的平衡因子来检查树的平衡状态。如果平衡因子超出允许范围(2或-2),则进行相应的旋转操作(左旋、右旋、右左双旋或左右双旋)以恢复平衡。旋转操作调整了树的结构,并更新了相关节点的平衡因子。最终,插入操作返回true表示成功插入,或false表示插入失败(如遇到重复键值)。代码
2025-05-11 22:27:47
517
12
原创 C++ 关联式容器:map,multimap,set,multiset
本文详细介绍了C++标准模板库(STL)中的关联式容器,包括set、map、multiset和multimap。关联式容器通过键值对存储数据,提供了高效的检索功能,底层通常采用红黑树等平衡搜索树实现。set和map分别用于存储唯一元素和键值对,而multiset和multimap则允许重复元素。文章还探讨了这些容器的特性、模板参数、常用接口及使用示例,帮助读者理解其应用场景和底层实现,从而在实际编程中更高效地使用这些容器。
2025-05-10 17:50:54
1111
21
原创 C++异常介绍
C语言传统错误处理方式主要包括终止程序(如assert)和返回错误码,前者在严重错误时使用,后者则更为常见,但需要程序员自行查找错误。C++引入了异常处理机制,通过throw抛出异常,try捕获异常,catch处理异常,这种方式相比C语言更为灵活和温和。C++异常处理允许异常的重新抛出,确保异常能在更外层的调用链中处理。异常安全是C++中的一个重要概念,特别是在构造函数和析构函数中,避免抛出异常以防止资源泄漏。C++异常规范通过throw(类型)明确函数可能抛出的异常类型,提高了代码的可读性和安全性。尽管C
2025-05-10 16:37:47
908
25
原创 二分查找习题
本文总结了二叉树相关问题的解题思路与实现方法,主要包括:二叉搜索树转双向链表:利用中序遍历特性,调整指针构建有序双向链表。二叉树转字符串:通过前序遍历,处理空节点并拼接字符串,确保二叉树与字符串的一一映射。二叉树的最近公共祖先:通过递归回溯或路径记录,找到深度最大的公共祖先节点。二叉树前序遍历:使用栈模拟递归,按根-左-右顺序遍历节点。二叉树中序遍历:借助栈实现左-根-右的遍历顺序,确保节点值按序记录。二叉树后序遍历:采用双栈法或单栈标记法,实现左-右-根的遍历顺序。每种方法均结合C++代码
2025-05-07 22:24:51
532
21
原创 二叉搜索树
二叉搜索树是一种特殊的二叉树,它满足以下性质:- 对于树中的每个节点,其左子树中所有节点的值都小于该节点的值。- 对于树中的每个节点,其右子树中所有节点的值都大于该节点的值。基于这些性质,二叉搜索树能够在平均情况下以O(\log n) 的时间复杂度完成查找、插入和删除操作,其中n 是树中节点的数量。代码结构我们来看的这段C++ 代码定义了一个 BSTree 类,用于实现二叉搜索树。
2025-05-05 16:54:35
1212
19
原创 C++ 多态:原理、实现与应用
被 virtual 关键字修饰的类成员函数。cpppublic:std::cout << "买票 - 全价" << std::endl;派生类中定义与基类虚函数返回值类型、函数名字、参数列表完全相同的虚函数。cpppublic:std::cout << "买票 - 半价" << std::endl;1. 通过基类指针或引用调用虚函数:###不可用子类指针或引用调用虚函数(- 使用父类指针或引用可以指向不同的子类对象,通过相同的父类接口来调用不同子类实现的方法,从而体现多态性。
2025-05-04 18:06:18
1409
20
原创 C++ 中的继承
在C++ 编程世界里,继承是一项极为关键的特性,它为代码的复用和层次化设计提供了强大支持。掌握继承机制,对于编写高效、可维护的C++ 代码至关重要。今天,就让我们一起深入探究C++ 中的继承。继承是面向对象程序设计实现代码复用的重要手段。它允许我们在保持原有类特性的基础上进行扩展,产生新的类,即派生类。这体现了面向对象程序设计的层次结构,从简单到复杂逐步构建。
2025-05-03 19:01:19
1079
23
原创 C++模板知识
一个程序(项目)由若干个源文件共同实现,每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件,这种模式就是分离编译模式。1. 模板复用了代码,节省资源,能实现更快的迭代开发,C++的标准模板库(STL)就是基于模板产生的。2. 增强了代码的灵活性,能适应多种数据类型。
2025-05-02 17:16:45
949
12
原创 冯·诺依曼体系:现代计算机的底层逻辑与百年传承
从第一台电子计算机到如今的云计算、人工智能,冯·诺依曼体系始终是计算机科学的根基。它不仅定义了计算机的工作方式,更启发了无数技术创新。理解这一体系,就像掌握了打开现代科技世界的钥匙,让我们得以窥探计算机背后的神秘逻辑。未来无论技术如何演进,冯·诺依曼的智慧都将持续闪耀在计算领域的星河之中。如果你对计算机体系结构感兴趣,不妨尝试编写一段简单的汇编程序,亲自体验指令在冯·诺依曼架构中的运行轨迹,这或许会让你对这一伟大设计有更深的感悟。
2025-05-02 12:08:19
1778
18
原创 优先级队列
cpp// 优先级队列模板类// T: 元素类型// X: 底层存储容器类型,默认使用std::vector// Compare: 比较器类型,默认使用Lessprivate:X _con;// 底层存储容器// 堆调整函数声明public:// 构造函数、插入、删除等成员函数声明void pop();通过模板参数 T 、 X 和 Compare ,我们实现了类型、容器和比较规则的高度可定制化。
2025-04-30 18:29:39
1027
27
原创 Linux调试器 - gdb使用指南
debug 模式下,程序保留了丰富的调试信息,包括变量名、函数名、行号等,这使得开发者能够在调试过程中清晰地了解程序的内部状态,方便查找问题。当我们已经仔细检查完程序某个区域的代码,确认该部分代码逻辑无误,想要让程序继续执行下去,以观察后续代码的执行情况时,使用该指令可让程序快速运行,直到遇到下一个断点或程序结束。执行到当前函数返回,然后暂停下来等待后续命令。当我们进入一个函数内部进行调试,在查看完函数内部相关信息后,若想快速回到函数调用的上层继续调试,使用该指令可直接执行到函数返回,无需逐行单步执行。
2025-04-28 22:06:28
1361
29
原创 深入探究C++ 中的stack、queue和deque
C++中 deque 的注意事项及示例:1. 迭代器失效:在 deque 中插入或删除元素后,除了指向被删除元素的迭代器外,其他迭代器可能仍然有效,但可能会导致迭代器重新定位。cpp// 插入元素后,迭代器it仍然有效return 0;1. 容量和内存管理: deque 的内存管理相对复杂,它通过分段连续内存实现。与 vector 相比, deque 在头部插入和删除元素更高效,因为不需要移动大量元素来调整内存。cppi < 10;++i) {
2025-04-28 15:01:16
1400
27
原创 Linux 开发与 Git 入门实践:从进度条小程序到代码托管
2. 在新页面中输入项目名称(注意名称不能重复,系统会自动校验),可选择填写项目描述,设置项目为公开(Public)或私有(Private),还可以选择是否初始化 README 文件等。通过使用 git log 及其相关选项,我们可以方便地回顾项目的开发历史,了解每次代码改动的情况,在排查问题、追溯功能添加等场景中非常有用。- 辅助代码管理:在多人协作时可察觉冲突隐患;3. 在创建好的项目页面中复制项目的链接,链接有 HTTPS 和 SSH 两种形式,可按需复制,以备接下来进行下载。
2025-04-27 16:02:55
2512
22
原创 栈相关算法题解题思路与代码实现分享
通过这两道栈相关的算法题,我们可以看到栈在解决这类数据顺序相关问题时的巧妙应用。在实际解题过程中,关键是要理解栈的特性,并灵活运用辅助栈等技巧来满足题目要求。希望这些分享能对大家在算法学习和面试准备中有所帮助,也欢迎大家一起交流探讨更优的解题思路。
2025-04-26 18:25:02
916
25
原创 深入理解C++ 中的list容器
list 的底层是双向链表结构。每个元素存储在独立的节点中,节点通过指针指向前一个元素和后一个元素 ,并且是带头结点的双向循环链表。这意味着在链表中,头结点可以作为一个哨兵节点,方便进行插入和删除操作,同时循环的特性使得从链表的尾部可以无缝连接到头部。cppT data;list 容器凭借其独特的双向链表结构,在插入和删除操作上具有高效性,适用于需要频繁进行这些操作的场景。
2025-04-25 21:44:47
1348
24
原创 深入探究Linux项目自动化构建工具:make与Makefile
一个大型工程中,源文件数量众多,且依据类型、功能、模块等分布在不同目录。Makefile 的出现,就是为了定义一系列规则,明确哪些文件需先编译、哪些后编译、哪些要重新编译,甚至执行更复杂的操作。make 则是一个命令工具,专门解释 Makefile 中设定的指令。常见的IDE,如Delphi的 make 、Visual C++的 nmake 、Linux下GNU的 make ,都支持这一编译方式。二者配合,实现项目自动化构建,极大提升软件开发效率。
2025-04-23 22:45:27
1018
27
原创 刷题之路:C++ 解题分享与技术总结
通过这段时间的刷题,我不仅对 C++ 的语法和特性更加熟悉,也掌握了不少算法解题技巧,比如双指针法、排序法、位运算等。在解题过程中,对问题进行深入分析,找到合适的算法思路是关键,同时也要注意代码的时间复杂度和空间复杂度,以满足题目要求。刷题是一个长期积累的过程,后续我还会继续分享更多的解题经验和技术总结,希望能对大家有所帮助。希望这篇博客对你有所帮助,欢迎在评论区交流讨论!
2025-04-22 19:59:00
810
22
原创 C++ vector 核心功能解析与实现
我们实现的 vector 类模板主要包含以下几个关键部分:1. 数据成员:用于管理动态数组的内存和元素范围。2. 赋值运算符重载:实现对象之间的赋值操作。3. 下标运算符重载:支持通过 [] 访问元素。4. 内存管理函数: reserve 和 resize 用于控制动态数组的容量和大小。5. 元素访问函数: front 和 back 用于获取容器的首元素和尾元素。
2025-04-21 16:34:32
1219
26
原创 深入理解C++ 中的vector容器
vector 是表示可变大小数组的序列容器。它采用连续存储空间来存储元素,这使得我们可以像操作数组一样,通过下标高效地访问元素。与普通数组不同的是, vector 的大小能够动态改变,容器会自动处理内存管理相关事宜。从本质上讲, vector 使用动态分配数组来存储元素。当新元素插入时,如果当前空间不足,它会分配一个新的数组,并将全部元素迁移到新数组中。虽然这个过程相对耗时,但 vector 并非每次插入新元素都进行这样的操作,以平衡效率。
2025-04-19 16:04:07
1168
20
原创 深入理解C++中string的深浅拷贝
为了更深入理解深浅拷贝的原理,我们手动实现一个简单的字符串类 MyString ,并分别展示浅拷贝和深拷贝的实现方式。
2025-04-18 16:03:55
1013
17
原创 深入探究Linux编译器gcc/g++:从基础到进阶
连接阶段是将多个目标文件以及所需的库文件组合在一起,生成最终的可执行文件或库文件。通过 gcc hello.o -o hello ,这里的 -o 选项指定输出文件名,执行该命令后,就得到了可以运行的 hello 程序。
2025-04-16 21:56:35
940
16
原创 详解LeetCode中用字符串实现整数相加,字符串转整数及其溢出处理详解
cpp循环结束后,有可能还存在进位(即 next 为1),此时需要在结果字符串 retstr 的末尾添加字符 '1' ,以表示最高位的进位。给定一个字符串,将其转换为对应的整数。同时需要处理字符串开头的空格、正负号,并且在转换过程中要考虑整数溢出的情况。上述代码通过定义 Solution 类中的 strToInt 函数实现了该功能,下面我们逐行分析代码的具体实现。这段代码通过从字符串末尾逐位相加、处理进位以及结果反转的方式,巧妙地实现了两个字符串形式非负整数的相加。
2025-04-15 23:32:47
1038
17
原创 深入剖析C++中 String 类的模拟实现
cpp定义了普通迭代器和常量迭代器类型,方便对字符串进行遍历操作。通过以上一系列的实现,我们构建了一个功能相对丰富的 String 类模拟版本。从基本的对象生命周期管理(构造、析构),到关键的拷贝与赋值操作,再到多样化的字符串操作以及简单的迭代器支持,每一个部分都精心设计,确保正确性和高效性。理解这些底层实现原理,不仅能让我们更好地使用标准库中的 string 类,还能在面对复杂字符串处理需求时,具备更强的代码设计和优化能力。
2025-04-14 21:32:02
1198
14
原创 C++中string库常用函数超详细解析与深度实践
C++ string 库的函数体系覆盖了字符串处理的全生命周期,从基础创建、拼接、查找,到复杂的替换、性能优化,每个函数都有其独特的应用场景。开发者在使用时需注意边界条件、内存管理和迭代器有效性等问题,结合实际需求灵活运用,才能发挥 string 类的最大效能。通过不断实践和总结,能够更高效地处理文本数据,提升C++程序的稳定性与性能。
2025-04-14 15:43:53
1319
15
原创 C++中 string 类及迭代器相关知识详解
cpp// 定义一个空字符串// 使用字符串字面量初始化return 0;在上述代码中,我们定义了一个空字符串 s0 和一个初始化为"hello world"的字符串 s1 ,并将 s1 输出到控制台。
2025-04-13 23:49:54
1442
16
原创 深入探索Linux开发工具:Vim与Yum
Vim和Yum在Linux开发工作流中扮演着重要角色。熟练掌握Vim的各种操作和配置技巧,能让代码编辑变得高效流畅;而灵活运用Yum进行软件的安装、卸载和管理,可轻松构建和维护开发环境。希望通过这篇博客,能帮助大家更好地驾驭这两款工具,在Linux开发之路上更进一步。
2025-04-13 13:47:52
1138
13
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人