- 博客(68)
- 收藏
- 关注
原创 【C++11】新的类功能、模板的可变参数、包装器
摘要:本文系统讲解了C++11中的三大核心特性:新增的类功能(移动构造/赋值、default与delete关键字)、模板可变参数(参数包展开与emplace高效应用),以及函数包装器std::function与参数适配器std::bind的用法。通过代码示例剖析了默认成员函数的生成规则、可变参数模板的递归与逗号表达式展开技巧,并对比std::bind与Lambda表达式在回调机制和策略模式中的优劣。文章结合STL容器实现与LeetCode实战,帮助开发者掌握如何利用C++11新特性提升代码效率与灵活性。
2025-04-16 14:43:09
674
原创 【C++11】列表初始化、右值引用、完美转发、lambda表达式
本文系统讲解了C++11的重要新特性,涵盖列表初始化、变量类型推导(auto/decltype)、范围for循环及新增容器(array、unordered系列等)。重点剖析右值引用与移动语义如何优化深拷贝性能,完美转发在模板编程中的应用,以及Lambda表达式简化仿函数设计的实践。通过代码示例与场景分析,阐释C++11在提升开发效率、增强类型安全及支持现代编程范式中的核心作用。适合开发者快速掌握C++11的核心改进,为高效编程提供实用指导。
2025-04-16 14:36:25
1178
原创 【C++】手把手教my_unordered_map,set的底层编写,以及解决编写时可能遇到的问题
本文深入探讨如何将基础哈希桶结构改造为支持STL风格unordered_map、unordered_set的高效容器。通过分析模板参数冲突、迭代器设计、const限定符兼容性等核心问题,逐步解析哈希表扩容机制、键值类型封装及操作符重载的实现细节。文章提供完整代码示例与编译错误解决方案,涵盖operator[]、const_iterator等高级特性,为理解C++模板编程与STL容器底层原理提供实践指导。
2025-04-13 15:20:26
1327
原创 【C++】哈希unordered_map和set的使用以及哈希表,哈希桶的概念以及底层实现
C++中的unordered_map与unordered_set基于哈希表实现,提供平均O(1)的插入、查找效率,元素无序存储;而map/set基于红黑树,保持有序但操作稳定在O(log n)。哈希容器通过开放定址法或拉链法解决冲突,负载因子超阈值自动扩容。有序容器适合范围查询,哈希容器则胜在快速访问。自定义键类型需提供哈希函数(如字符串特化BKDR算法)。性能测试显示:10万数据插入,哈希容器耗时仅为有序的1/7。根据场景选择:高频查找用哈希,有序遍历用红黑树,合理选择性能翻倍!
2025-04-13 09:19:07
1350
原创 【C++】深入解析C++ STL:map与set的红黑树实现与高级封装技巧
本文深入剖析C++ STL中map与set的底层实现,揭示其基于**红黑树(RBTree)**的核心设计。通过对比两者差异,解析map如何通过pair<K,V>存储键值对,而set直接使用键值;**仿函数(KeyOfT)**的巧妙设计解决了键值提取的通用性问题。详解红黑树的插入逻辑、颜色调整及迭代器封装,展示STL如何通过运算符重载隐藏底层复杂性。实战部分涵盖operator[]的实现、深拷贝陷阱及源码中哨兵节点的优化思想。最后结合面试高频考点,探讨封装意义与性能权衡,助你从底层掌握STL容器的精髓,进阶C
2025-04-08 09:34:10
992
原创 【C++】一文搞懂红黑树:从理论到实战全覆盖
红黑树是一种通过节点颜色标记(红/黑)和路径约束规则实现近似平衡的二叉搜索树,确保最长路径不超过最短路径的两倍。其核心优势在于插入/删除效率高于AVL树,广泛应用于STL、数据库索引等领域。红黑树具有五大性质:颜色规则、根节点为黑色、无连续红节点、黑高一致和叶子节点为黑色。插入操作分为二叉搜索树插入和颜色调整,需根据父节点和叔叔节点颜色进行单旋或双旋调整。验证方法包括检查根节点颜色、无连续红节点以及所有路径黑色节点数一致。红黑树适合频繁插入删除的场景,而AVL树更适合查询密集型应用。
2025-04-03 09:47:24
890
原创 【C++】 AVL树深度解析:严格平衡二叉搜索树的终极指南
AVL树是一种严格的自平衡二叉搜索树,通过限制左右子树高度差(平衡因子绝对值≤1)确保树的高度为O(log n),从而保证搜索、插入、删除操作的高效性。其核心优势在于适用于静态数据或查询密集型场景,如数据库索引、内存管理等。AVL树具有五大性质:二叉搜索树性质、平衡因子约束、高度平衡、动态调整和时间复杂度。插入操作分为二叉搜索树插入和平衡因子更新与旋转两步,平衡因子更新规则为插入左侧父节点平衡因子-1,插入右侧父节点平衡因子+1,当平衡因子为0时停止更新,为±2时触发旋转操作。AVL树有四种旋转操作:右单旋
2025-04-03 09:43:35
899
原创 【Linux】线程:从原理到实战,全面掌握多线程编程!
本文深入剖析Linux多线程核心机制,详解pthread库的线程创建、参数传递(推荐堆内存避免竞争)、同步控制(互斥锁/条件变量)及线程终止(join/detach)。通过实战代码演示多线程批量化创建、返回值处理及资源管理,揭示C++11标准线程库的类型安全与RAII优势。⚠️ 重点警示:野指针崩溃、内存泄漏等陷阱,强调线程分离与异常处理的重要性。附赠调试技巧(valgrind/gdb)及跨平台开发指南,助你写出高效稳健的多线程程序!🚀
2025-04-01 09:09:41
660
原创 【C++】map&set使用与实战 OJ题
C++ STL关联式容器(如set、map等)基于红黑树实现,以键值对形式高效管理数据,支持O(log n)时间复杂度的查找。与序列式容器不同,其元素按严格弱排序自动组织,支持去重、有序遍历及快速检索。核心容器包括set(唯一值集合)、map(键值映射)及允许重复的multiset/multimap。高阶操作涵盖自定义排序规则、范围查询(如lower_bound/upper_bound)及结合优先级队列统计高频元素。实战应用包括数组交集、链表深拷贝及词频统计等LeetCode高频题。掌握红黑树底层逻辑与容器
2025-04-01 09:07:10
1001
原创 【Linux】线程的概念、虚拟地址最终理解(这一篇足够)
本文深入解析操作系统的内存管理机制,探讨了物理内存以 4KB 为单位管理的原理,以及虚拟地址如何通过页表转换为物理地址。文章详细介绍了进程和线程的概念,分析了它们的优缺点及应用场景。通过代码示例,展示了线程的创建与运行过程,并通过对比表格总结了进程与线程的特点。文章还探讨了线程共享资源的机制及其对编程的影响,帮助读者全面理解操作系统的核心原理,提升编程实践能力。
2025-03-30 15:45:09
1279
原创 【Linux】一篇搞定内核态进程信号
Linux进程信号是系统编程中不可或缺的核心机制,用于实现进程间异步通信与事件响应。本文从基础概念切入,详解标准信号(如SIGINT、SIGKILL)与实时信号的区别,剖析信号产生方式(终端操作、系统调用)及处理逻辑(自定义函数、sigaction高级控制)。深入探讨SIGCHLD资源回收、段错误调试(核心转储分析)与不可重入函数风险,结合volatile关键字优化变量可见性。实战部分涵盖定时器管理(alarm与最小堆算法)、多线程安全与性能调优技巧,助开发者高效处理信号冲突、规避僵尸进程,全面提升系统稳定
2025-03-30 15:45:01
725
原创 【Linux】System V共享内存:零拷贝加速进程通信!
本文深入探讨System V IPC中的共享内存技术,介绍其原理、操作步骤及实现细节。通过让多个进程共享同一物理内存区域,共享内存实现了高效的数据传输。文章详细讲解了获取key值、创建共享内存段、映射共享内存、使用共享内存、解除映射与删除等操作步骤,并通过创建Shm类封装代码,方便服务端和客户端使用。此外,还介绍了如何利用管道等机制保护共享内存,解决数据一致性问题,以及共享内存的大小设置、属性获取等其他相关内容。
2025-03-28 09:52:21
865
原创 【Linux】System V信号量与IPC资源管理简易讲解
以上内容涵盖了System V信号量的概念、操作函数、优缺点、最佳实践,以及Linux系统中用于管理信号量的IPC指令,同时还深入探讨了操作系统如何统一管理共享内存、消息队列和信号量的机制。
2025-03-28 09:51:27
607
原创 【Linux】深入解析Linux命名管道(FIFO):原理、实现与实战应用
本文深入解析Linux命名管道(FIFO),阐述其作为特殊文件实现无亲缘关系进程通信的核心概念,数据仅在内核缓冲区传输。详细说明读写阻塞规则及信号处理机制。通过C++封装类实现服务端与客户端设计,展示创建、读写、同步及异常处理等关键代码逻辑,结合实际运行效果与终端截图验证通信行为。内容融合理论与实战,强调技术深度与实用性,吸引系统编程开发者,提升搜索引擎可见性。
2025-03-27 09:22:58
1032
原创 【Linux】深度解析Linux进程间通信:匿名管道原理、实战进程池与高频问题排查。
本文深入探讨Linux进程间通信(IPC),以匿名管道为核心,详细阐述其通信目的、实现前提及机制。涵盖数据传输、资源共享等核心目的,说明共享OS资源与系统调用支持的实现前提。重点解析匿名管道和命名管道的机制、特征,包括内核缓冲区管理、文件描述符作用及进程通信的四种关键情况和五大特征。实战应用部分展示进程池、命令行管道的实现及代码示例,同时剖析关键技术细节与常见问题解决方案,为开发者提供全面的技术指导。
2025-03-27 09:20:32
782
原创 【C++】搜索二叉树的实现以及应用
1️⃣:处理空树+重复值检测,代码鲁棒性提升!:类外友好访问设计,递归实现有序输出。:类似插入的二分搜索,时间复杂度O(h)。:分治左右子树空/非空场景,重点解析(右子树最小节点替换+父指针调整)。2️⃣:构建单词BST,快速检索正确性(如英汉词典)。:键值对存储(如水果计数),动态更新出现次数。3️⃣:插入/删除时判断_root是否为空,避免空指针崩溃。:精准定位右子树最小节点,修正父指针关联逻辑。4️⃣平衡性影响效率:理想O(logN) vs 退化O(N),为后续AVL树/红黑树埋下伏笔。
2025-03-24 10:45:00
1060
1
原创 【C++】多态:一篇搞定虚函数、协变、动静态绑定、虚表与内存模型
C++多态是面向对象的“变形魔法”,同一操作引发不同对象特有行为!🔥 核心要点:虚函数+重写:基类用virtual声明,子类override实现多态(协变、析构函数例外)。虚函数表:对象含虚表指针(_vfptr),运行时动态绑定函数地址,实现“传父调父,传子调子”。关键优势:扩展性强(如新增图形无需改渲染系统)、代码复用(统一接口调用不同逻辑)。避坑指南:析构函数必为虚函数防内存泄漏;多继承中虚表按基类顺序存储。 实战价值:从动物合唱团到菱形继承,案例+内存模型图解,助你掌握底层原理与高频面试题
2025-03-23 17:18:43
995
原创 【C++】继承机制:从基础到避坑详细解说
本文系统讲解了C++继承的核心概念与常见问题。继承通过派生类复用基类特性,支持public、protected、private三种访问方式,基类私有成员对派生类不可见。派生类默认成员函数(构造、拷贝构造等)需显式调用基类对应方法,析构顺序遵循“先子后父”。菱形继承会导致数据冗余和二义性,可通过虚拟继承(virtual关键字)解决,其底层通过偏移量指针优化内存模型。此外,文章对比了继承(is-a关系)与组合(has-a关系),强调优先使用组合以降低耦合。最后总结了笔试高频问题,如菱形继承缺陷、多继承取舍等。
2025-03-22 18:01:03
809
1
原创 【Linux】文件查找、软硬链接、动静态库
本博客深入探讨了Linux文件系统、IO操作、软硬链接、动态库与静态库等内容。从文件查找机制到软硬链接的特征与应用,再到动态库与静态库的制作、使用及区别,均有详细讲解。通过实例展示了如何创建和使用软硬链接,以及如何将代码编译成.o文件,再进一步打包成静态库或动态库,还介绍了链接时的注意事项和库的加载机制。内容丰富实用,适合Linux学习者和开发者参考,能帮助读者更好地理解和运用Linux系统底层知识。
2025-03-20 15:02:23
626
原创 【Linux】深入理解Linux文件系统:从磁盘结构到inode与挂载
本文从磁盘的物理结构出发,解析机械硬盘(HDD)的组成(盘片、磁头、磁道、扇区)与工作原理,对比企业级磁盘与SSD的差异。通过CHS定址法和LBA逻辑块地址,揭示操作系统如何将磁盘抽象为线性数组,以块(如4KB)为单位管理数据。进一步深入Linux的ext2文件系统:分区格式化写入超级块、inode表、块位图等元数据;文件存储依赖inode(唯一编号)记录属性,通过直接/间接寻址映射数据块;目录本质是特殊文件,保存文件名与inode的映射关系。最后结合实战,演示如何用dd命令创建虚拟磁盘
2025-03-18 21:13:04
964
原创 【Linux】从文件操作到重定向与缓冲区的底层实现与实战
Linux系统调用中的核心函数read()和stat(),详细讲解其参数、返回值及常见错误,并通过代码示例演示从标准输入和文件读取数据的实现。深入剖析文件描述符的分配规则与重定向机制,结合dup2()系统调用实现输出重定向到文件的功能。同时探讨缓冲区的意义与分类(行缓冲、全缓冲),揭示C语言标准I/O库高效性的底层逻辑。最后通过实战案例,手把手实现简易版Shell的重定向功能及封装用户级I/O库,解释stderr与stdout的区别及分离日志的应用场景。内容涵盖理论解析、代码实现与调试技巧,适合Linux开
2025-03-18 11:31:36
595
原创 【Linux】基础IO之操作与文件描述符fd全解析:从C语言到系统调用底层实现
本文剖析Linux文件操作与系统调用原理,从C语言文件打开模式(如w清空、a追加)及重定向机制切入,详解open()的标志位(O_CREAT/O_EXCL等)、权限设置与原子性操作。核心揭示文件描述符(fd)本质:内核文件指针数组下标,通过struct file管理文件属性及缓冲区。结合“一切皆文件”设计,阐明设备通过函数指针表抽象为文件接口,并验证C语言FILE对fd的封装,最终呈现用户态到内核态的文件操作链路。
2025-03-15 21:34:00
740
原创 【Linux】进程的创建、终止、等待与程序替换函数 保姆级讲解
进程的创建(fork机制与写时拷贝)、终止(退出码、信号及资源回收)、等待(wait与waitpid避免僵尸进程)以及程序替换(exec系列函数与环境变量管理)。
2025-03-14 16:03:08
1415
2
原创 【Linux】操作系统内存管理:地址空间、页表、写时拷贝与进程调度原理
本文系统阐述了操作系统内存管理核心机制。地址空间作为进程独立虚拟内存视图,通过struct结构体划分代码区、数据区等逻辑区域,配合页表实现虚拟到物理地址的映射。每个进程拥有独立地址空间,操作系统通过页表管理实现内存隔离与共享。地址空间使无序物理内存有序化,为进程提供统一视角,同时解耦进程管理与内存管理模块,支持延迟物理内存分配。页表机制配合写时拷贝技术,在fork时共享父进程内存,仅在实际写入时复制物理页,有效提升内存利用率。虚拟地址本质是地址空间内的逻辑地址,通过多级页表转换访问物理内存。
2025-03-12 17:32:12
928
原创 【Linux】ubuntu 使用时一些小问题整理 --- 持续更新
通过以上步骤,可以解决pupu用户提示符显示不完整和快捷键无法正常使用的问题。如果还有其他问题,可以进一步检查用户的shell配置文件和环境变量设置。
2025-03-12 17:31:57
982
原创 【C++】 优先级队列 priority_queue使用与模拟实现、详细讲解仿函数的使用
c++ 优先级队列 priority_queue使用与模拟实现、详细讲解仿函数的使用,以及对大堆小堆实现的复习
2025-03-10 14:49:57
1065
原创 【C++】string模拟实现
主要实现string类的构造、拷贝构造、赋值运算符重载以及析构函数再开始之前我们需要提供对底层字符数组的直接访问的函数也就是。
2025-02-24 16:24:05
580
原创 【Linux】调试器-gdb使用 结合 vs2022学会代码调试
本文主要讲解gdb调试代码,并且结合vs2022、vs2019进行讲解,能很好地学会gdb调试指令,以及如何调试代码找到问题,也能学会vs中该如何调试
2024-11-24 10:45:00
1377
原创 【C++】类和对象(下)
1.初始化列表中未给值和未给缺省值的变量,先给随机值,在进入构造函数中括号后,给定义对象时的值;2.初始化列表中给值和给缺省值的变量,优先使用初始化列表中给的值,在进入构造函数中括号后,给定义对象时的值;3.初始化列表中未给值和给了缺省值的变量,就先使用缺省值,在进入构造函数中括号后,给定义对象时的值;4.能用初始化列表、就用初始化列表5.在初始化列表中一个变量只能出现一次class Datepublic:,_n(1)private://声明int _year;
2024-11-23 10:45:00
853
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人