自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

日拱一卒,功不唐捐

deMo1的学习博客

  • 博客(57)
  • 收藏
  • 关注

原创 Linux指令--shell(外壳是什么),系统信息命令,tar命令,win与linux、linux与linux系统间的文件传输

本文系统讲解Shell工作原理与Linux系统管理实战:从终端快捷键、Shell命令执行流程(用户→Shell→内核)到uname、tcpdump抓包、scp/rsync文件传输、tar打包、mount挂载及关机命令;深入解析五种进程间通信方式,结合ls -l权限分析与Permission denied报错案例,掌握su -提权、chown/chmod等权限修复方法,实现从命令理解到实际运维的闭环。

2026-11-07 21:59:24 198 2

原创 Linux指令--一切皆文件思想,重定向操作,六种文件类型,日志查看演示,date和时间戳介绍

本文阐述Linux核心理念“一切皆文件”,指出终端、键盘、显示器均为/dev下的设备文件,程序的stdin/stdout/stderr是系统预开的文件。通过重定向操作>(覆盖)、>>(追加)、<(输入),实现与C语言fopen模式的对应。结合ls -l首字符区分六类文件(如c字符设备、b块设备),掌握日志查看工具tail -f、wc等及管道使用。利用date格式码实现可读时间与Unix时间戳(1970-01-01 00:00:00 UTC)互转,并说明which与whereis命令定位差异。最终理解echo

2026-11-04 23:43:24 390 3

原创 Linux基础指令--操作方式,pwd与whoami,ls和touch,目录结构,初学常用Linux指令详解

本文系统梳理 Linux 命令行基础,涵盖命令行优势、定位三件套(pwd、whoami、提示符)、文件查看(ls -l/-la)、路径概念(绝对/相对)、目录切换(cd四用法)、文件属性(stat详解)及复制(cp四种写法)。重点掌握 ls -l 与 stat 输出解析,理解“一切皆文件”与目录树结构,实现对文件操作指令的脱稿应用。

2026-11-04 23:41:15 417 2

原创 Linux初识:Linux的历史,计算机的发展脉络,发行版本,选购云服务器,安装Xshell,第一次连接,基础命令指南

计算机的发展脉络,发行版本,选购云服务器,安装Xshell,第一次连接,基础命令指南

2026-10-31 20:20:40 463 7

原创 C++智能指针,为什么需要智能指针,原理与使用,三大智能指针及其特性,循环引用陷阱

智能指针基于RAII解决内存泄漏、悬挂指针等问题。unique_ptr独占资源,零开销;shared_ptr引用计数共享所有权,make_shared一次分配更高效;weak_ptr不增加强计数,打破循环引用。核心:独占用unique_ptr,共享用shared_ptr,回指用weak_ptr;避免裸指针混用与虚析构缺失,注意shared_ptr<const T>与const shared_ptr<T>区别。

2026-10-29 19:27:16 204 6

原创 C++异常,异常的概念,异常抛出与捕获,RAII 和智能指针的设计思路,C++标准库一些指针的使用

本文系统梳理C++异常处理与资源管理机制:从错误码到异常类对象的演进,详解异常抛出、栈展开与匹配规则;揭示异常安全问题及“捕获-释放-重抛”策略,强调RAII思想是根本解法。深入剖析unique_ptr、shared_ptr、weak_ptr等智能指针的设计原理与使用规范,涵盖删除器、make_shared、noexcept等关键特性,构建安全高效的资源管理体系。

2026-10-28 23:36:24 345 4

原创 C++11第四讲,Lambda的组成部分四要素,捕获列表,Lambda原理,编译器何时生成移动构造和移动赋值,STL中的一些优化,类的优化

C++11 Lambda 捕获列表决定外部变量访问方式:值捕获复制副本,引用捕获共享原对象,混合捕获支持默认+例外。Lambda 编译为匿名闭包类,含数据成员与 operator(),有捕获时类型唯一,需 std::function 类型擦除。编译器仅在无用户声明的拷贝/析构函数时自动生成移动操作,否则退化为拷贝,影响性能优化。

2026-10-27 23:48:31 264 6

原创 C++11第三讲,函数模板,可变参数模板,完美转发,lambda表达式介绍

本文系统讲解C++11中模板参数推导、变参模板与Lambda表达式的核心机制。通过函数模板实现类型泛化,解决代码重复问题;利用模板参数推导自动匹配实参类型,掌握万能引用与完美转发原理;结合变参模板与参数包展开,实现可变参数函数的递归与直接展开;深入剖析emplace_back相比push_back在性能上的优势,体现完美转发的工程价值;最后引入Lambda表达式,理解其作为闭包对象的捕获机制,为后续STL算法使用谓词奠定基础。

2026-10-27 23:43:52 453 6

原创 C++11第二篇,传值返回为什么很贵,优化方案,输出型参数,编译器优化,右值引用,移动语义

函数返回大对象时,深拷贝代价高昂。本文以杨辉三角为例,剖析传值返回的性能瓶颈,提出三种优化方案:输出参数(零拷贝但牺牲可读性)、编译器RVO/NRVO(依赖优化,C++17起部分保证)、移动语义(标准保证,O(1)资源转移)。结合汇编分析与计数验证,揭示“寄存器传递优于栈”的底层原理,强调现代C++应优先依赖移动语义与标准保证,而非依赖编译器优化。

2026-10-24 19:02:29 304

原创 C++11,发展历史浅谈,初始化列表和对象初始化,右值引用和移动语义

C++11 引入右值引用(T&&)与移动语义,实现资源转移而非拷贝,显著提升性能。通过区分左值(可取地址)与右值(临时对象),支持移动构造/赋值,避免冗余拷贝。结合 std::move 和完美转发,优化容器、智能指针等场景。作为标准演进关键特性,推动现代 C++ 高效编程范式。

2026-10-22 23:01:24 330 5

原创 哈希封装,哈希函数设计,冲突解决策略,负载因子,封装实现

本文系统讲解哈希表核心原理与C++封装实现:从哈希函数设计(除留余数、乘法散列、字符串哈希等)、冲突解决(链地址法与开放寻址法及其聚簇问题),到负载因子控制与摊还分析。手写Hash<K, V>模板类,支持traits注入哈希/等价函数、侵入式链表桶、扩容重哈希及迭代器设计;重点解析开放寻址删除的墓碑机制。横向对比主流库实现差异,提炼易错点与主动回忆清单,助读者深入掌握哈希表精髓。

2026-10-22 22:46:50 473 5

原创 哈希表续篇,哈希函数如何设计,冲突解决策略,扩容机制,其他哈希结构

本文系统解析C++ unordered_map底层机制:从哈希函数设计(除留法、乘法散列、FNV等)到冲突解决(链地址法与开放定址法),详述线性探测、墓碑删除及扩容重哈希的四步迁移过程。结合素数容量选择、摊还复杂度分析,对比GCC与MSVC实现差异,延伸至HashDoS防护与Swiss Table等高级变体,完整揭示“键如何落位”到“表如何扩容”的全链路原理。

2026-10-16 19:58:08 351 1

原创 哈希表底层原理解析,直接定址法,哈希冲突,负载因子,哈希函数,开放定址法

本文系统解析哈希表底层原理,对比 set(红黑树)与 unordered_set(哈希表)在键要求、迭代器类型与性能上的差异,揭示其模板参数设计逻辑。从直接定址法局限引出哈希冲突不可避免性,重点剖析除法散列中“M取质数”与Java HashMap“取2的幂+位运算”的矛盾设计本质:前者为理论均匀分布,后者以折叠异或提升实际分布性。通过 {19,30,5,...} 入 M=11 表的完整演示,揭示线性探测引发的堆积现象,并阐明删除需用三态标记(EXIST/EMPTY/DELETE)以维护探测链完整性。

2026-10-16 19:51:41 316

原创 封装map和set,红黑树内部的具体实现,单模板参数无法实现的原因,模板泛型思想的应用,迭代器特性

本文解析SGI STL中_Rb_tree如何通过模板参数复用同一棵红黑树实现set与map:节点存储内容由Value模板参数决定(Key或pair<const Key, T>),KeyOfValue提取比较键;迭代器基于中序遍历设计,begin()指向最左节点,end()为哨兵header,++/--通过右子树最左或父链上溯实现。关键点:源码Value≠键值对的value,set元素不可改,map key为const,解引用end()未定义。

2026-10-13 10:19:47 617 8

原创 C++算法学习篇5--二分查找法

本文系统梳理二分查找在8道LeetCode题中的应用,涵盖基础查找、边界定位、旋转数组、山脉峰值等场景。核心在于构建正确的循环不变量,合理选择mid取值方向(偏左/偏右)与指针移动策略,避免死循环。重点解析了最左/最右边界模板、插入位置、平方根等典型问题的解题逻辑,强调特判条件与数据类型溢出防护,提升二分实现的准确性与鲁棒性。

2026-10-13 09:42:27 335 7

原创 红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证

本文以"为什么需要一种比 AVL 更稳的平衡树"为起点,完整梳理红黑树的五条性质(每节点非红即黑、根必黑、红节点子节点必黑、同一路径黑节点数相等即黑高、叶哨兵为黑);再用"最短路径 vs 最长路径"的论证说明红黑树高度恒不超过 2·log₂(N+1),从而查找/插入/删除都是 O(log n);核心部分逐一拆解插入后的五种违规场景(父黑直接停、父红叔红变色、父红叔黑 zig 旋转、zig-zag 双旋转)与对应的"变色 / 单旋 / 双旋"修复动作,配 C++ 修复代码;删除部分给出操作骨架

2026-10-05 22:43:54 351 2

原创 AVL 树系统梳理 ——AVL树的结构、AVL树的实现、AVL树的插入、平衡因子,旋转,遍历,平衡检测

本文系统梳理AVL树核心机制:以二叉搜索树退化为切入点,定义平衡因子(bf = 左高−右高,合法值{-1,0,1}),详解右单旋、左单旋、左右旋、右左旋四类旋转的指针操作与“接回祖父”关键步骤;结合插入后回溯找首个|bf|=2节点的修复流程,构建LL/RR/LR/RL四类定型与旋转的决策树,并辅以8节点示例验证平衡因子计算、遍历及删除操作;最后对比红黑树,明确AVL在读多写少场景下的优势。全文贯通笔记与代码实现,目标是实现“看懂即能写”。

2026-10-05 22:26:20 519 4

原创 C++ map 底层与AVL 树

本文系统梳理 C++ std::map 底层基于平衡二叉搜索树(如 AVL、红黑树)、LeetCode 692 前 K 个高频单词的哈希+小顶堆解法,以及 AVL 树的定义、四种失衡情形与旋转修复机制。核心要点包括:operator[] 自动插入默认值,insert 失败不覆盖;堆比较器需按频次升序、同频字典序降序;AVL 树通过旋转维护高度差 ≤1,插入修复最多两步旋转,保证 O(log n) 操作效率。

2026-10-01 18:19:28 390 8

原创 刷题日记(带手写笔记版)--滑窗法,法将x减到0的最小操作数,水果成篮,找到字符串中所有字母异位词,串联所有单词的子串,最小覆盖子串

本文总结了滑动窗口算法在五道力扣题中的应用:1)将x减到0的最小操作数(转为求最大子数组和);2)水果成篮(最多两种水果的最大连续段);3)字母异位词查找(固定窗口匹配);4)串联所有单词的子串(多单词拼接问题);5)最小覆盖子串(最小窗口包含目标字符)。核心思想均为维护滑动窗口,通过双指针动态调整,结合哈希表统计字符/单词频次,实现高效求解。

2026-10-01 17:37:18 186 8

原创 C++进阶map和set的基本概念,关联容器和序列容器,set的基本操作,map容器详解,实践应用案例

本文详解C++ STL中set与map的特性与用法:二者基于红黑树实现,提供O(log N)的高效查找、插入与删除操作。set用于唯一有序集合,支持自动去重与集合运算;map实现键值映射,适用于词典、缓存等场景。强调使用find()而非[]避免意外创建元素,注意遍历时删除导致迭代器失效等问题。通过代码示例展示插入、查找、删除、遍历及自定义比较函数等核心操作,帮助开发者掌握其高效应用。

2026-09-26 14:02:09 179 3

原创 C++进阶--二叉搜索树的性质与遍历,增删查改操作,key_value操作场景,删除操作的常见陷阱

二叉搜索树(BST)基于“左小右大”性质,实现高效查找、插入与删除操作(平均O(log n))。删除操作分三类:叶子节点直接删;单孩子用子节点替换;双孩子则用右子树最小值(中序后继)替代并递归删除。需注意递归返回更新父节点指针,避免内存泄漏。最坏情况退化为链表,复杂度升至O(n),建议使用平衡树优化。适用于键值对快速检索,如字典、数据库索引等场景。

2026-09-26 13:50:02 295 3

原创 算法修炼chapter3 滑动窗口

滑动窗口是一种基于双指针的高效算法思想,通过维护一个动态窗口,将复杂的时间复杂度从O(n²)优化至O(n),适用于求解满足特定条件的连续子数组或子串问题。核心在于:右指针扩展窗口,左指针收缩窗口,保持窗口内元素满足条件。典型应用包括最小长度子数组(> target)、无重复字符最长子串、最多翻转k个0的最大连续1的个数等,均通过“进窗口—判断—出窗口—更新结果”的统一框架解决,体现了算法设计中的贪心与剪枝思想。

2026-09-15 23:59:19 209 4

原创 C++多态深入解析:多态概念,多态实现条件,虚函数表与内存分布,常见问题及注意事项

本文深入解析C++多态机制,涵盖运行时多态的三大实现条件:继承、虚函数与基类指针/引用。详解虚函数表(vtable)与虚函数表指针(vptr)的底层原理,强调纯虚函数与抽象类在接口设计中的作用,并警示缺省参数不参与多态、对象切割及非虚析构导致内存泄漏等常见陷阱。核心口诀“一虚二重写三指针”助你掌握多态精髓,适合面试准备与OOP基础巩固。

2026-09-15 23:56:43 182 3

原创 算法修炼 chapter 2 双指针进阶、盛最多水的容器、有效三角形的个数、两数之和、三数之和、四数之和

本章学习双指针技法在容器盛水、三角形判断、两数/三数/四数之和等问题中的应用,涵盖5道经典题。

2026-09-02 21:56:16 267 6

原创 C++继承第二讲--实现一个不可继承的类,友元在继承当中的陷阱,菱形继承解析

本文系统讲解继承体系的进阶知识点,涵盖不可继承类的设计、友元与静态成员的特性、菱形继承问题的本质及虚继承解决方案,以及继承与组合的设计哲学对比。每节均配有完整代码示例和避坑提醒,帮助读者建立扎实的面向对象设计基础。

2026-09-02 16:06:11 474 3

原创 C++进阶--继承的概念、三种继承方式、派生类和基类的转换、作用域与隐藏、默认成员函数调用规则,其他重要问题延申

C++ 的面向对象有三大特性:**封装、继承、多态**。封装让类有自己的边界,而继承让类之间产生"父子关系"——子类自动拥有父类的成员,还能在此基础上扩展新功能。这篇文章就带你把继承掰开揉碎,从最基本的概念问到最棘手的菱形继承,每一节都有代码示例和避坑提醒。

2026-08-31 20:41:25 301 1

原创 C++模板进阶--非类型模板参数、函数模板特化、模板分离编译问题、指针类型偏特化、总结与最佳实践

C++ 模板是泛型编程的核心,掌握其高级特性对于编写高质量、高性能的代码至关重要。本文面向有一定 C++ 基础的开发者,系统讲解模板编程中的进阶主题,包括**非类型模板参数**、**函数模板与类模板的特化**、**模板分离编译问题**以及**指针类型偏特化**。

2026-08-31 19:20:33 402

原创 刷题日记day2--字符判断函数详解、相关字符判断函数总结,string中与位置和迭代器有关的函数,size和length区别简介

本文主要介绍了算法题中经常会出现的字符判断函数,帮助我们在解算法题的时候事半功倍,以及string中与位置和迭代器有关的函数,便于我们访问string中的一些典型位置的值

2026-08-27 20:17:15 223 2

原创 算法修炼chapter 1双指针法--移动零、复写零、快乐数

本篇介绍了算法中常用的双指针法,并给出了三道应用了双指针法的例题。

2026-08-27 20:12:53 193 1

原创 刷题日记day1--string的特性、相关接口解析,四道算法题,substr、getline、find_first_of

本文记录C++字符串基础接口学习与算法刷题实战,涵盖4道题目 + 2个核心知识点。

2026-08-26 22:25:21 273

原创 C++ STL 容器与数据结构详解:deque 底层迭代器、priority_queue 优先队列、堆排序原理、冒泡排序泛型实现

本文系统讲解 C++ STL 中几个核心容器的底层实现原理及常用数据结构。主要内容包括:deque 的双端队列设计——通过中控数组(map)管理多个固定大小缓冲区,实现头尾 O(1) 操作的同时支持随机访问;priority_queue 优先队列的堆适配器机制及其默认大顶堆行为;堆(Heap)作为完全二叉树的数组映射关系,以及向上/向下调整算法和堆排序实现;冒泡排序的泛型函数对象模式。文章穿插代码示例与面试高频考点,帮助读者深入理解 STL 容器背后的设计思想。

2026-08-26 10:43:29 444 2

原创 C++ list第二讲数据结构修炼:迭代器源码 + 栈队列适配器 + LeetCode 三道高频题

本文从 C++ STL 迭代器原理出发,系统讲解栈(Stack)与队列(Queue)两种容器适配器的底层设计与典型应用场景。通过 LeetCode 155 最小栈、栈的压入弹出序列、二叉树层序遍历三道高频题,串联「迭代器 → 容器适配器 → BFS」的完整知识链,帮助读者理解数据结构选择背后的设计思想,并掌握用栈/队列解决经典算法问题的通用方法。

2026-08-23 12:27:46 577 4

原创 C++STL--list底层实现,迭代器分类,模拟list的迭代器封装、实现

本文深入解析C++ STL中list容器的底层实现原理,从四个核心维度展开: 迭代器特性:详细对比双向迭代器与随机访问迭代器的差异,分析list迭代器的类型和性能特点 内部结构:揭示循环双向链表+哨兵节点的精妙设计,通过图示展示push_back操作的具体实现 迭代器封装:对比普通实现与STL标准封装方式,给出符合规范的迭代器类模板实现 类型系统:完整梳理STL容器的成员类型定义体系 文章包含大量技术细节和示意图,适合希望深入理解STL设计思想的开发者阅读,为手写容器类提供扎实的理论基础。最后附有权威参考

2026-08-23 10:41:10 497 3

原创 C++--vector第二讲:手写 C++ STL:vector 源码剖析与迭代器失效分析

本文深入剖析了C++ STL中vector的底层实现与迭代器失效问题。首先解释了vector的三指针内存布局(_start、_finish、_end_of_storage)及size与capacity的区别。然后详细讲解了构造函数实现,特别是支持任意容器迭代器的区间构造模板。重点分析了reserve扩容时的深拷贝陷阱,指出memcpy浅拷贝会导致非POD类型数据错误。文章核心探讨了insert操作引发的迭代器失效现象,通过VS2019和Linux环境对比展示了失效后的程序崩溃表现,并给出正确使用方法。最后介

2026-08-19 21:06:29 379 5

原创 C++--vector底层,leetcode118杨辉三角实战,对于传统reserve的坑点,迭代器失效

深入理解 vector:从二维数组到 STL 源码剖析 本文系统性地探讨了 C++ vector 的实现原理与应用方法。主要内容包括: 二维数组实现:解析 vector<vector<int>> 的嵌套结构,对比外层对象数组与内层堆内存管理 模拟实现:通过 operator[] 展示模板实例化机制,分析 vector<int> 与 vector<vector<int>> 的底层差异 实战应用:以 LeetCode 118 杨辉三角为例,对比 C 指针数组与 vector 解法,突显自动内存管理优势 源码剖析

2026-08-19 20:24:39 428 2

原创 C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve

本文深入探讨C++中string类的深拷贝、swap优化、容量管理等内容。首先介绍了string的构造/拷贝构造/赋值操作实现,提出通过swap实现高效安全的拷贝语义。其次分析了引用计数与写时拷贝(COW)机制,对比了VS和g++的底层实现差异。通过实验验证了不同编译器下vector的扩容策略:VS约1.5倍扩容,g++为2倍扩容。最后详细解析了reserve函数的作用机制,强调其只影响capacity不影响size的特性,并对比了string和vector的容量管理特点。

2026-08-17 11:38:28 216 6

原创 C++--一文打通:string 手写实现 + ASCII 码表 + UTF-8/GBK 编码

本文深入探讨C++ string的底层实现与字符编码原理。内容包括: 手写string核心操作:实现insert(字符/字符串)、erase、substr函数,分析扩容策略与数据移动逻辑 实际应用示例:使用find和substr提取文件后缀名 字符编码体系: ASCII编码原理与码表解析 字符存储本质:数值与符号的映射关系 Unicode标准与UTF-8/GBK编码方案对比 底层视角:通过内存地址观察字符串实际存储方式,理解从二进制到字符的解码过程 文章结合代码实现与编码理论,帮助开发者深入理解字符串在计算

2026-08-17 11:29:19 475 7

原创 C++STL容器string第二讲--string常用接口,插入删除接口,替换replace,正反向查找,模拟迭代器的实现和常用接口的模拟实现

本文介绍了C++ string类的常用接口及底层实现,重点内容包括: 核心操作: 增:append()多种重载实现字符串追加 删:erase()三种删除方式(位置/迭代器/区间) 改:replace()实现子串替换 查:find()/rfind()查找子串位置 截取:substr()获取子串 输入:getline()按分隔符读取 性能警示: erase和replace是性能杀手,需谨慎使用 底层实现: 迭代器本质是字符指针 通过reserve优化内存分配 模拟实现string类的基本结构 实用技巧: 使用r

2026-08-11 22:21:48 272 11

原创 C++STL容器string--迭代器,string的接口,string的遍历,访问方式

本文介绍了C++中迭代器与容器操作的基础知识,主要内容包括: 迭代器的作用与基本用法:迭代器是STL六大组件之一,提供统一访问容器元素的方式,类似指针但非指针。介绍了begin()/end()遍历方法。 范围for循环:简化容器遍历的语法糖,默认值拷贝,需加引用才能修改容器元素。 auto关键字:自动类型推导,简化长类型名,但有使用限制。 迭代器类型:四种迭代器(正向/反向、普通/const)的区别与适用场景。 const迭代器:const对象必须使用const迭代器访问。 reserve与reverse:

2026-08-11 22:11:08 350 8

原创 C++模板初阶与STL初探

摘要: 本文系统讲解了C++内存管理、模板与STL核心知识。首先剖析了C/C++程序内存区域划分(栈/堆/静态区等)及各区域特性。随后对比了malloc/free与new/delete的六大关键区别,包括初始化方式、失败处理机制及对自定义类型的支持差异。在模板部分,详细介绍了函数模板的隐式/显式实例化机制和类模板的定义方法,重点演示了动态数组模板的扩容实现。最后概述了STL六大组件(容器/算法/迭代器等)及其作为标准化软件框架的价值。全文通过代码示例与原理图示,为C++泛型编程和标准库使用奠定基础。

2026-08-08 11:08:31 219

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除