自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 经典算法解析:整数划分 + 归并排序 (C++ 实现),重点详解归并排序递归与非递归版本

整数划分:递归思想的入门经典题,理解递归的分治逻辑;归并排序:时间复杂度稳定 O (nlogn) 的高效排序,重点讲解递归实现 + 非递归实现,适配面试、笔试、考试高频考点。所有代码均可直接编译运行,注释详细,适合新手学习~将正整数n表示成一系列正整数之和,,求划分的种类数(不考虑顺序)。q(n, m)表示将n划分,最大加数不超过 m的划分个数。归并排序核心:分治 + 合并,时间复杂度稳定O(nlogn),稳定排序;递归版:代码简洁,逻辑清晰,适合理解;非递归版:无栈溢出风险,效率更高,

2026-04-04 21:03:57 409

原创 C++ 算法与数据结构硬核总结:堆排序、优先级队列、快排、栈队列全覆盖

堆排序:向下调整、向上调整、建堆、排序完整实现优先级队列:基于小根堆手动封装(入队、出队、取堆顶)快速排序:双路划分 + 单向划分两种核心写法STL 容器:stack、queue、priority_queue 基础用法所有代码均为教学版,逻辑清晰,适合背诵和理解。堆排序小根堆:父 ≤ 子建堆 O (n),排序 O (nlogn)向下调整是核心优先级队列入队:尾插 + 向上调整出队:堆顶替换 + 向下调整快速排序分治 + 划分单向 / 双路划分都要会STL。

2026-04-04 21:03:41 284

原创 经典算法实现:二分查找、全排列与子集生成

二分查找:高效查找有序数组,重点掌握折半思想和边界处理,尤其是重复元素场景的变种;全排列:回溯法的经典应用,核心是 “交换 - 递归 - 回溯”,需理解回溯的本质是恢复现场;子集生成:通过 0-1 标记法遍历所有元素的选择状态,是回溯法解决组合问题的典型思路。这些算法是算法学习的基础,掌握其核心思想后,可拓展到更复杂的场景(如带重复元素的全排列、子集去重、二分查找的变种问题等)。建议大家手动敲写代码,调试理解每一步的执行逻辑,加深对算法的理解。

2026-04-02 00:01:31 452

原创 QT6网络编程入门:手把手教你写带UI的TCP服务端(可直接复制源码)

本文基于QT6环境,完整讲解了可视化TCP服务端的开发全流程,从开发环境准备、项目创建、UI界面设计,到核心代码实现、功能解析、编译运行注意事项,再到具体的运行演示,每一步都贴合新手入门需求,代码简洁易懂、注释清晰,可直接复制编译运行。

2026-04-02 00:00:48 477

原创 Ubuntu虚拟机下基于C++实现带时间戳的日志系统(CMake构建完整版)

本文基于 Ubuntu 环境,通过 C++ 实现了带时间戳的轻量级日志系统,采用 CMake 完成项目构建,实现了时间戳的获取与格式化、多级别日志输出等核心功能。项目结构清晰,模块化设计便于扩展,可作为 Linux 下 C++ 项目日志系统的基础模板。

2026-04-01 10:29:14 804

原创 深入理解 C++ Lambda 表达式:从基础到实战

匿名性:Lambda 是匿名函数,可通过 auto 接收其类型,直接调用或作为参数传递;捕获规则[]:无捕获;[=]:值捕获所有外部变量;[&]:引用捕获所有外部变量;[var]:值捕获指定变量 var;[&var]:引用捕获指定变量 var;[this]:类成员函数中捕获 this 指针;mutable:仅对值捕获生效,解除 Lambda 体内拷贝变量的 const 限制;灵活性:C++14 支持自动类型推导参数,可适配不同类型的输入;生命周期。

2026-04-01 10:28:40 500

原创 C++ 线程编程核心知识点全解析(从基础到进阶)

本文围绕 C++ 线程编程的核心知识点展开,从基础的线程创建、移动语义,到同步互斥(mutex/lock_guard/unique_lock)、条件变量、生产者 - 消费者模型,再到死锁避免和参数传递坑点,覆盖了多线程开发的核心场景。不可拷贝,仅可移动,join()detach()需合理使用;互斥锁优先使用 RAII 封装(lock_guard),避免手动解锁;条件变量解决线程协作问题,需配合和条件判断避免虚假唤醒;死锁的核心解决思路是 “锁排序”,优先使用;

2026-03-31 15:55:58 502

原创 Linux锁机制详解(含实战示例,面试必备)

Linux锁机制的核心是“按需选择”——没有最好的锁,只有最适合的锁。掌握各类锁的特性、适用场景和接口,不仅能解决日常开发中的并发问题,也是Linux开发者面试的核心竞争力。简单总结:用户态开发:优先用互斥锁、读写锁;短临界区用自旋锁;线程间等待唤醒用条件变量。内核态开发:中断上下文用自旋锁;进程上下文长临界区用互斥锁;读极多写极少用RCU锁。进程间同步:低频率用文件锁;高频用共享内存+互斥锁。

2026-03-31 15:08:42 587

原创 堆区(Heap)与栈区(Stack)的核心区别

栈区:自动分配、自动释放、速度快、空间小、线程独立。堆区:手动分配 / 智能指针管理、手动 / 自动释放、速度慢、空间大、全局共享。栈区自动管理,速度快、空间小,存临时变量。堆区手动 / 智能指针管理,速度慢、空间大,存长期对象。shared_ptr 只用于管理堆区对象,不能管理栈区对象。小对象用栈,大对象 / 动态生命周期用堆 + 智能指针。

2026-03-24 17:08:26 400

原创 C++ 中 shared_ptr 的创建:构造函数 vs make_shared 深度解析 + enable_shared_from_this 安全用法

s​​​​​​​是C++ 标准库为优化shared_ptr创建而设计的工具,凭借一次内存分配、高异常安全性、简洁语法成为常规场景下的首选;而直接使用构造函数创建shared_ptr则以灵活性取胜,能处理自定义删除器、私有构造、数组管理等无法覆盖的特殊场景。在实际开发中,应遵循优先使用 make_shared,特殊场景用构造函数的原则,同时注意的内存释放滞后性问题,避免因悬空的weak_ptr造成不必要的内存浪费。理解两种创建方式的底层内存实现,才能根据业务场景做出最优选择,让shared_ptr。

2026-03-24 16:55:01 597

原创 C++ weak_ptr 详解:从原理到实战,彻底解决shared_ptr循环引用

weak_ptr不是独立的智能指针,而是shared_ptr的“辅助工具”,用于解决循环引用和安全观察对象。2. 核心特性:不拥有对象、不增加强引用计数、需升级为shared_ptr才能访问对象、线程安全的lock()接口。3. 核心场景:解决shared_ptr循环引用、缓存、观察者模式。掌握weak_ptr,能让你在使用shared_ptr时更安全、更灵活,彻底摆脱循环引用导致的内存泄漏问题,写出更健壮的C++代码。最后,留一个小练习:尝试用weak_ptr。

2026-03-23 17:43:40 499

原创 C/C++ 核心知识点:值返回、引用返回、指针返回全解析

为了更清晰的区分三者,将核心差异整理为表格,涵盖返回本质、内存开销、修改能力、生命周期要求、空值支持、效率对比维度值返回引用返回指针返回核心本质返回原数据的副本返回原数据的别名返回原数据的地址内存开销有拷贝开销(创建副本)无开销(共享内存)极小(存储地址,4/8 字节)原数据修改能力无法修改可以修改(const 可限制)可以修改(const 可限制)生命周期要求无(可返回局部变量)高(不可返回局部变量)高(不可返回局部变量)空值支持不支持(必须返回有效值)

2026-03-21 20:33:25 511

原创 C/C++ 中 new 与 malloc 的核心区别与底层原理详解

​​​​​​​malloc和new作为堆内存分配的核心方式,其差异的本质是C 语言纯内存管理与C++ 面向对象内存管理malloc是 “极简的内存分配工具”,仅完成内存申请,无初始化、无对象适配,是 C 语言内存管理的基础;new是 C++ 对内存管理的升级与封装,融合了 “内存分配 + 初始化 + 对象构造 + 异常处理”,让内存管理更安全、更贴合 C++ 的开发特性。在实际开发中,C++ 项目优先使用 new/delete,仅在兼容 C 代码时才考虑 malloc/free。

2026-03-21 20:33:05 535

原创 C 语言动态内存函数深度解析:malloc、calloc、realloc 原理与实战

本文详细讲解了 C 语言 / C++ 中动态内存分配三大核心函数:malloc、calloc、realloc的用法、特性与区别,这是编程和面试中的高频考点,也是堆内存管理的基础,核心要点可以归纳为:(1)三大函数核心区别函数作用参数内存初始化核心特点malloc分配指定大小内存总字节数随机垃圾值最常用,需手动初始化calloc分配并清零内存元素个数 + 单个大小自动初始化为 0适合需要默认 0 值的场景realloc调整已有内存大小原指针 + 新大小原有数据保留,新增空间随机。

2026-03-20 16:39:58 613

原创 C++ 浅拷贝 / 深拷贝 / 移动语义 全网最细图解 + 代码实战

C++ 默认生成的拷贝构造函数和赋值运算符重载,都是浅拷贝。如果类中没有堆区资源,浅拷贝完全没问题;但如果类中有指针指向堆内存重复释放内存(程序崩溃)内存泄漏野指针 / 空悬指针只要类中有指针指向堆内存,就必须自己写深拷贝!1. 浅拷贝(1)只拷贝指针(2)多个对象指向同一块堆内存(3)析构崩溃、野指针、内存泄漏2. 深拷贝(1)重新开辟空间 + 拷贝内容(2)资源独立(3)安全但效率一般3. 深赋值(1)先释放旧内存(2)再开辟新空间(3)拷贝数据4. 移动语义(C++11)

2026-03-20 16:39:29 849

原创 C++ 核心关键字深度解析:const 与 static 的本质区别与实战指南

const(常量限定符)和static(静态关键字)都是 C++ 核心关键字,但作用完全不同。本文将从变量、指针、函数、类成员四个维度,对比两者的语法、特性与最佳实践,帮你彻底分清何时用 const,何时用 static。

2026-03-19 19:09:00 228

原创 C++手动实现共享智能指针my_shared_ptr|引用计数+删除器+完整可运行代码

本文围绕C++共享智能指针的手动实现展开,从核心概念到完整代码,详细拆解了my_shared_ptr的实现逻辑与底层原理。首先介绍了共享智能指针的核心思想——通过共享所有权管理资源,结合引用计数机制,确保资源在无人持有时自动释放,既支持堆内存,也可适配各类系统资源;随后讲解了引用计数的核心作用,通过计数器记录资源持有数量,避免频繁拷贝与内存泄漏。

2026-03-19 18:23:22 451

原创 C++智能指针从入门到手写:unique_ptr核心实现与源码剖析

智能指针 = 包装了裸指针的类 + 自动内存管理机制智能指针的本质是一个对象,不是真正的指针,行为用起来像指针(支持->),特点是生命周期结束时(离开作用域)自动调用析构函数释放内存,并且完全遵循 C++ 的RAII 机制(资源获取即初始化)本文围绕C++内存管理痛点展开,深度拆解智能指针的核心价值与实现逻辑,聚焦最常用的std::unique_ptr独占智能指针。

2026-03-17 15:41:08 947

空空如也

空空如也

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

TA关注的人

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