自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

星光编译者的技术博客,专注 C/C++、Linux、数据结构与算法。

记录真实问题,分享可运行的代码与清晰的解题思路,让每一次编译与调试,都成为通往技术星河的一束光。

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

原创 【Linux mmap 文件映射】从虚拟地址到页缓存:读写文件、匿名映射与极简 malloc

PROT_READ:允许读;PROT_WRITE:允许写;PROT_EXEC:允许执行;PROT_NONE:暂时不可访问。权限既要符合业务意图,也要与文件打开方式兼容。例如,对文件建立可写MAP_SHARED映射时,描述符通常必须以O_RDWR打开;否则mmap可能以EACCES失败。安全上应遵循最小权限原则:只读数据不要添加PROT_WRITE,普通数据不要添加PROT_EXEC。文件长度通常不是页大小的整数倍。[0, 4096) 完整页[4096, 8192) 完整页。

2026-09-09 15:55:36 253 13

原创 全网最实用 LaTeX 安装与使用教程(2026 版):TeX Live、TeXstudio、Overleaf 从零到第一份 PDF

选定 XeLaTeX 编译器。成功编译第一份中文文档。遇到错误时先读第一条报错信息。当你完成这三步,后面的图片、表格、公式和参考文献,都只是逐项添加功能。与其一开始背完所有命令,不如先把最小示例跑起来,再把自己的论文内容一点点迁移进去。如果你只是想马上开始,打开 Overleaf;如果你准备长期写论文,装好 TeX Live 和 TeXstudio。两条路线都能得到同样专业、稳定的 PDF。

2026-09-08 13:16:08 416 6

原创 【Makefile 进阶】从自动发现源文件、模式规则到目录分离与多模块递归构建

wildcard 扫描真实源文件↓foreach 跨模块汇总文件列表↓patsubst 把 .c 映射成 objs/.../*.o↓模式规则复用一条编译逻辑↓$< 提供输入,$@ 提供输出,$^ 提供全部链接依赖↓$(dir $@) 创建目标父目录↓addprefix 生成 -I 搜索路径↓-MMD -MP 生成 .d,补齐头文件依赖↓顶层 Makefile 用 $(MAKE) -C 编排子模块↓make 根据依赖图和时间戳完成增量、并行构建。

2026-09-05 20:17:12 455 9

原创 【C++类和对象(下)深度解析】从初始化列表、类型转换与静态成员到友元、内部类和拷贝消除

🔥 星光编译者 · 个人主页📚 学习专栏: 《C/C++ 成长笔记》 · 《Linux 实践手册》 · 《数据结构与算法》🌄 向云端飞扬,编译属于自己的代码星河。  你好,这里是 星光编译者。  这里记录我在 C/C++、Linux、数据结构与算法 学习中遇到的真实问题、亲手验证过的代码,以及那些容易被忽略的实现细节。  比起简单罗列结论,我更愿意从问题出发,把一个知识点的来由讲清楚,把“为什么会这样”和“应该怎样解决”说明白,让每一次踩坑都沉淀成可以复用的经验。  如果这篇记录能帮你少绕一点路,或让

2026-09-04 10:08:57 556 11

原创 【C++ 类和对象(中)下篇】运算符重载、拷贝赋值、日期类实战与 const 成员

本文可以归纳为四条主线。

2026-09-02 13:35:57 364 11

原创 【C++ 类和对象(中)上篇】默认成员函数:构造、析构、拷贝构造与深浅拷贝

public:private:private:创建时,两个Stack成员会分别调用自己的默认构造。MyQueue不需要重复编写“如何初始化 Stack”的细节。如果类存在成员之间的内部指针、缓存、注册关系、外部句柄或“复制后必须重新绑定”的不变量,默认逐成员拷贝可能仍不够。private:// 可能指向 data_ 内部直接复制后,selected_可能仍指向源对象的data_。因此判断标准不是“成员都是标准库类型就永远安全”,而是复制后整个对象的不变量是否仍成立。

2026-09-01 18:52:23 432 10

原创 【C++类和对象(上)】从类的定义、封装与对象模型到内存对齐和 this 指针

int year;int month;int day;// 语法允许,但这个状态通常没有业务意义public:private:int _year;int _month;int _day;此时,Date不只描述“有三个整数”,还规定了对象能够提供什么操作、哪些状态不能被外部随意破坏。把数据、操作和访问规则组织成一个完整类型。int _month;int _day;

2026-08-30 20:35:28 783 9

原创 【C++入门基础(上)】从发展历程、学习路线到命名空间与输入输出

从 C 的效率与控制能力出发↓C++ 通过标准化持续演进为多范式语言↓教程负责建立路径,参考手册负责查询,标准负责精确定义↓源文件经过预处理、编译、汇编和链接形成程序↓命名空间给名称建立边界,限定名让来源清晰↓cin/cout 通过类型化的流完成输入输出↓从第一天开始关注警告、错误阶段、输入失败和可移植性现代 C++ 不只是“C 加上类”,而是一门支持多种编程范式的系统级语言;标准版本、编译器支持和项目启用的语言模式是三件不同的事;

2026-08-28 12:08:48 593 10

原创 【C++入门基础(下)】默认参数、函数重载、引用、inline 与 nullptr

add(1, 2);// int 版本// double 版本// string 版本// f.h// 只有声明// f.cpp// 定义只在这个翻译单元可见另一个翻译单元调用f时看不到可达定义,不满足内联函数的使用要求。问题的根源不是“展开后绝对没有函数地址”,而是需要使用该内联函数的定义域必须能看到相应定义。通常把完整定义放在头文件中。public:private:“放在头文件”背后的原因并不完全相同:内联函数依赖多定义与可达定义规则;模板还涉及按需实例化。

2026-08-28 12:08:28 469 5

原创 【C++ string 上篇】从字符串基础到容量管理、迭代器与经典算法题

这里npos恰好会通过无符号回绕得到正确结果,但这种技巧可读性不高,而且遇到尾随空格就失败。--end;C 字符串需要手工维护缓冲区与终止字符↓std::string 封装字符序列和资源生命周期↓size 描述有效字符,capacity 描述可用空间↓reserve 预留容量,resize 改变有效长度↓下标、迭代器和范围 for 完成遍历↓find/rfind 定位,substr 提取,npos 表示失败↓。

2026-08-27 11:50:45 474 9

原创 【C++ string 下篇】从浅拷贝陷阱到深拷贝、copy-and-swap 与模拟实现

对象不变量是:每个对外可观察的成员函数开始和结束时,都必须成立的条件。对教学版String2. 正常持有存储时,data_ 指向 capacity_ + 1 个 char4. [0, size_) 保存有效字符5. 移动后的特殊空状态允许 data_ == nullptr6. 若 data_ == nullptr,则 size_ == 0 且 capacity_ == 0读取函数:不破坏不变量修改函数:完成操作后恢复不变量失败路径:原对象仍满足不变量析构函数:只释放自己拥有的资源。

2026-08-27 11:50:32 414 4

原创 【C++模板初阶】从泛型编程到函数模板、类模板与编译期实例化

返回类型 函数名(参数列表) {// 函数体int a = 10;int b = 20;这里需要警惕返回引用的生命周期。若向这个版本传入临时对象,返回引用可能在完整表达式结束后悬空。首先是一个函数模板定义,不是某个确定签名的普通函数。// 仅用于帮助理解,不是要求编译器真的生成这段源码 int Add < int >(int left , int right) {int概念含义函数模板生成一族函数的规则或蓝图模板实参代入模板参数的具体类型或值函数模板特化。

2026-08-24 12:10:10 290 2

原创 【C++ vector 深度解析】从常用接口、扩容机制与迭代器失效到核心模拟实现

使用vectorvector是类模板,尖括号中的类型决定元素类型。与是两个不同的具体类型。大多数尾插只在已预留槽位构造一个元素;少数容量不足的插入需要迁移全部元素。几何式增长使多次迁移成本能摊到一系列插入上。vector连续存储提供随机访问与缓存局部性↓size 表示已构造元素,capacity 表示可用槽位↓reserve 只预留空间,resize 改变元素数量↓尾部追加通常摊还 O(1),中间插删需要搬移↓容量不足时申请新空间并逐对象迁移↓重新分配让全部旧位置失效↓。

2026-08-24 12:09:34 458 3

原创 【C++内存管理】从内存分区到 new/delete、operator new 与定位 new

malloc先分清对象本身与指针指向的数据↓理解自动、静态与动态存储期↓malloc/calloc/realloc/free 管理原始动态存储↓new-expression = 取得存储 + 初始化/构造对象↓delete-expression = 析构对象 + 释放匹配存储↓operator new/delete 只负责分配与释放原始存储↓placement new 在指定存储上开始对象生命周期↓业务代码优先用 RAII、容器和智能指针表达所有权。

2026-08-22 19:52:45 412 4

原创 【C++ STL简介】从六大组件到容器、迭代器与算法协作

STL 是的缩写,通常译为“标准模板库”。它不是某一个类,也不是几个容器的集合,而是一套建立在泛型编程思想上的可复用组件体系。可以先记住一句话:STL 用模板把常见数据结构和算法抽象成通用组件,让同一套算法可以服务于多种容器与元素类型。例如,排序不应该为intdouble、自定义类型分别复制一份代码;查找也不应该为数组、vectorlist分别重新发明。STL 尝试把变化的类型与存储方式隔离出去,把稳定的算法保留下来。是保存数据的容器;begin()和end()返回迭代器,共同描述待处理区间。

2026-08-22 19:52:34 449 3

原创 【Linux线程】线程控制全解析:终止、join/detach、cancel、线程栈与 NPTL(下篇)

pthread_create 创建线程↓线程在共享地址空间中独立执行↓return / pthread_exit / cancel 结束当前线程↓joinable 由 pthread_join 等待并回收detached 在线程结束后自动回收线程资源↓glibc/NPTL 借助 clone 能力建立同线程组的内核调度实体线程入口 return 与只结束当前线程,exit()或 main 返回会终止整个进程;

2026-08-21 14:29:47 673 6

原创 【C++ list 深度解析】从双向循环链表、常用接口与迭代器失效到核心模拟实现

使用std::listlist是类模板,尖括号中的类型决定节点里保存的元素类型。与是不同的具体类型。标准库的是通用适配器,它内部保存一个基础迭代器,通常通过base()取出。// 30// base 通常等于 values.end()错误。end()是尾后位置,最后一个元素需要通过--end()获得,前提是容器非空。给定目标迭代器后,单节点插入只需创建节点并修改固定数量的前驱、后继链接;但创建节点和定位目标位置的成本需要单独考虑。学习std::list。

2026-08-21 14:27:59 496 3

原创 【Linux线程同步】从数据竞争到 mutex、条件变量与生产者消费者(上篇)

共享对象被并发访问↓普通读写缺少 happens-before → data race↓mutex 保护共享不变量与临界区↓无竞争走用户态快路径,竞争时可能借助 futex 阻塞↓condition variable 让线程等待谓词变化↓BlockingQueue 用 not_empty / not_full 实现解耦与背压数据竞争在 C/C++ 中是未定义行为,不只是结果偶尔不对;锁保护的是共享不变量,临界区要正确且尽量短;条件变量绑定的是谓词,不是可累积通知;

2026-08-20 15:35:21 418 9

原创 【Linux线程同步】POSIX 信号量、环形队列、线程池、死锁与线程安全(下篇)

mutex 保护共享不变量↓condition variable 等待谓词变化↓BlockingQueue 实现解耦与背压↓semaphore 计数空槽与数据许可↓环形队列组合许可计数与游标互斥↓线程池复用 worker,并用状态机完成停止与回收↓工程层面继续处理可重入、单例、死锁与库边界semaphore 管理许可数量,mutex 管理互斥所有权;计数正确不代表容器和游标天然线程安全;线程池的任务必须在队列锁外执行;

2026-08-20 15:34:43 566 5

原创 【Linux】线程概念与控制:从地址空间、LWP 到 pthread_create、join、detach 与 NPTL

进程提供资源容器↓线程是可独立调度的执行流↓同组线程共享地址空间和进程级资源↓每个线程保留独立寄存器、栈、mask、errno 与调度状态↓pthread_create 创建新执行流↓pthread_t、TGID、TID 分别服务于不同观察层线程共享地址空间,但不共享寄存器上下文和栈的使用权;“线程私有栈”不代表其他线程在硬件上无法访问它;编译线程程序应使用-pthread;多数 Pthreads 函数直接返回错误号,不通过errno报错;pthread_t。

2026-08-17 20:25:54 427 10

原创 【Linux】进程信号:从产生、阻塞与递达到 sigaction、可重入与内核返回路径

SIG_DFL /* 使用默认动作 */ SIG_IGN /* 忽略 */ handler /* 调用用户处理函数 */理解 Linux 信号,关键不是背1~31事件发生→ 信号产生→ 进入进程共享或线程私有 pending→ 当前线程 mask 决定能否递达→ disposition 决定默认 / 忽略 / 捕获→ 内核构造信号帧并返回用户态 handler→ trampoline + sigreturn 恢复原上下文标准信号不按次数排队,不要拿它做可靠计数器;阻塞不是忽略。

2026-08-17 11:00:00 804 8

原创 【Linux】进程间通信:从匿名管道、FIFO 到共享内存、消息队列与信号量

独立进程地址空间↓ 需要可共同访问的中介匿名管道 / FIFO├── 单向字节流├── EOF 与 SIGPIPE 取决于所有端点引用├── PIPE_BUF 描述原子写入边界,不是总容量└── FIFO 通过路径让无亲缘进程会合System V 共享内存├── 多个虚拟地址映射同一组共享页├── shmdt 只分离,IPC_RMID 才标记删除└── 数据面很快,但必须额外同步System V 消息队列└── 保留消息边界,可按类型接收System V 信号量。

2026-08-16 10:32:25 652 13

原创 【Linux】库制作与链接原理:从静态库、动态库到 ELF、重定位、GOT 与 PLT

main.c↓ 预处理main.i↓ 编译main.s↓ 汇编main.o(ELF 可重定位目标文件)↓ 链接:目标文件 + 库 + 启动文件app(ELF 可执行文件或 PIE)↓ execve + ELF loader + 动态链接器(动态程序)进程地址空间编译负责把每个翻译单元变成.o;链接负责组合 Section、解析符号并应用重定位;装载负责根据 Program Header 建立进程映射;动态链接负责装载依赖库、解析动态符号并处理动态重定位。

2026-08-16 10:26:11 400 4

原创 【Linux】Ext 系列文件系统深度解析:从 LBA、inode、块组到路径解析、挂载与软硬链接

父目录中的目录项↓inode类型 / 权限 / UID / GID / 大小时间戳 / link count / 数据映射↓extent 或间接块索引↓数据块对象主要保存什么是否保存普通文件名目录项(directory entry)名字、inode 编号,Ext4 中还可带文件类型保存名字inode类型、权限、属主、大小、时间戳、链接计数、数据映射等通常不保存普通文件名数据块普通文件内容、目录项、索引块、扩展属性等取决于数据用途。

2026-08-15 11:03:54 331 7

原创 【Linux】基础 I/O 深度解析:FILE、文件描述符、open/read/write、重定向与缓冲区

学习 Linux I/O 时,最容易产生的错觉是:这些接口只是“不同写法”。printf()fwrite()属于 C 标准库,操作的是FILE *,通常带有用户态缓冲;write()是系统调用接口,操作的是整数文件描述符fd;fd再通过进程的文件描述符表引用内核中的打开文件对象;内核最终可能把请求交给文件系统、管道、终端驱动或网络协议栈。为什么printf()后文件里暂时没有内容,而write()的表现不同?为什么关闭 fd 1 后再open(),新文件常常恰好拿到 fd 1?

2026-08-15 10:45:33 640 7

原创 【Linux】基础开发工具全攻略:Vim、GCC、Makefile、Git 与 GDB,一篇串起完整开发链路

vim main.c程序能运行,当然值得高兴。编译器和调试器应该怎样安装?Vim 为什么一打开不能直接输入?.c文件是怎样一步步变成可执行文件的?修改一个文件后,为什么没必要重新编译整个项目?程序“能编译但结果不对”时,怎样观察现场?怎样保存每次修改,并安全地同步到远程仓库?这些问题分别对应不同工具。真正的工程能力,不是把工具名背下来,而是明确每个工具的职责边界,并让它们组成稳定流程。⚠️安全提醒:软件安装、系统升级和仓库源配置会改变系统状态。

2026-08-13 13:54:37 485 13

原创 【Linux】 入门必会:基础指令、目录结构与权限管理一篇搞懂

刚接触 Linux 时,很多人会陷入一个误区:把lscdmkdirgrep当成英语单词一样死记。目录树解决“文件在哪里”;标准输入输出解决“数据从哪里来、到哪里去”;权限模型解决“谁能对文件做什么”。当这三条主线打通后,新的 Linux 命令只是完成不同任务的工具,而不再是一堆零散知识点。⚠️安全提醒:不要在根目录、系统配置目录或重要业务目录中练习删除、覆盖和权限修改命令。尤其是rm -rf、输出重定向和递归chmod -R,执行前一定确认目标路径。目录树:使用路径定位对象↓。

2026-08-13 13:54:04 500 8

原创 【Linux】进程概念全攻略:从 PCB、进程状态到调度与虚拟内存,一篇打通底层逻辑

进程 = 正在运行的程序一个程序为什么可以同时启动多次,并拥有不同 PID?fork()明明只调用一次,为什么父子进程会得到不同返回值?进程睡眠时不占用 CPU,内核为什么还能找到并唤醒它?子进程已经退出,为什么ps中还会出现Z?父子进程打印出相同的变量地址,为什么变量值却能不同?单核 CPU 同一时刻只能执行一个任务,多个进程为何看起来同时运行?硬件负责执行指令↓操作系统描述并组织进程↓调度器决定谁获得 CPU↓进程状态记录当前能否运行↓虚拟内存提供独立的地址视图⚠️。

2026-08-13 13:48:30 471 5

原创 【Linux】进程控制深度解析:fork、exit、waitpid、exec 与简易 Shell 完整闭环

fork() 创建子进程exit() 结束进程waitpid() 等待子进程execvp() 执行新程序fork()明明只写了一次,为什么父子进程会收到两个返回值?父子各有一份文件描述符表,为什么又可能共享文件偏移?子进程return 7之后,父进程为什么不能直接把status当作7?exec已经“换了程序”,为什么 PID 没变?为什么cd不能像ls一样交给普通子进程执行?子进程调用execvp()失败后,为什么通常要_exit(127)?父进程 fork 创建子进程↓。

2026-08-13 13:47:25 1098 5

原创 GDB 超全详解教程:零基础入门到高阶调试

GDB(GNU Debugger)是 GNU 开源组织推出的跨平台、命令行式程序调试工具,支持 C/C++、Go、Rust 等主流编译型语言,可运行在 Linux、MacOS、类 Unix 系统,是后端开发、嵌入式开发、底层调试的核心工具。相较于 IDE 图形化调试,GDB 轻量化、无依赖、可远程调试、支持内核级调试,能够实现:程序启动调试、断点调试、堆栈分析、变量监控、内存查看、异常捕获、进程附着调试等全场景调试能力,是排查段错误、死循环、内存越界、堆栈溢出等疑难问题的必备工具。

2026-08-04 11:02:26 672 6

原创 计算机系统体系结构全解析:从冯·诺依曼原理到内存、外设核心知识

计算机系统体系结构,是指计算机软硬件系统的整体组织规范,具体定义了硬件部件组成、部件互联方式、数据传输规则、指令执行机制、软硬件交互逻辑,核心解决四大核心问题:计算机由哪些核心部件构成、各部件的专属功能与分工、数据和指令的流转路径、软硬件如何协同完成计算任务。不同于单纯的硬件组装,体系结构是一套标准化的运行规则,所有硬件、软件、程序都必须遵循该规则运行,是计算机能够稳定、自动化工作的核心保障。操作系统是一套常驻内存的系统级软件集合,是计算机硬件的第一层软件封装,也是管理计算机所有软硬件资源的系统平台。

2026-08-04 10:57:46 241 5

原创 C++ STL Set/Map 进阶用法与通用封装实战指南

在 C++ 开发中,数组、普通结构体、原生键值对存储方式存在诸多短板:手动去重逻辑繁琐、有序维护成本高、键值匹配效率低、自定义类型存储不支持、无法快速实现集合运算,在算法刷题、后端服务开发、数据处理场景中极易出现代码冗余、性能低下问题。C++ STL 提供的set(有序唯一集合容器)和map(有序键值映射容器)是基于红黑树实现的高效关联容器,默认自动排序、元素唯一、查询增删效率稳定,搭配哈希版本容器,可完美适配有序、无序、去重、映射匹配各类业务场景。

2026-08-02 11:45:09 363 10

原创 彻底搞懂哈希:哈希原理、哈希算法、哈希冲突与实战代码全解析

哈希(散列):通过一个哈希函数,将任意长度的输入(字符串、数字、文件、对象),映射为固定长度的输出字符串,这个输出就是哈希值/散列值。哈希就是给数据生成唯一“身份证号”。原始数据 = 人的信息哈希函数 = 身份证生成规则哈希值 = 身份证号算法输出长度安全性适用场景MD5128位(32位十六进制)低,已被破解文件校验、去重,禁止用于密码加密SHA-1160位(40位十六进制)低,已淘汰旧版本Git、历史兼容场景SHA-256256位(64位十六进制)高,安全稳定。

2026-08-02 11:43:55 782 7

原创 C++深度精讲:成员函数指针与std::function全方位解析

在C++开发与面试中,成员函数指针std::function包装器是高频重难点。绝大多数初学者都会疑惑:为什么普通函数可以直接取地址,而类成员函数必须加 &、必须带类域?成员函数指针为什么不能直接调用,必须用.*->*?std::function 包装静态/非静态成员函数的区别是什么?为什么包装非静态成员函数需要多传一个类对象参数?std::bind 如何简化成员函数调用、工程中如何做函数分发表?

2026-07-28 13:03:27 509 7

原创 C++11 彻底吃透 emplace_back 与 push_back(最全闭环:左右值|深浅拷贝|移动构造|万能引用|完美转发)

左值右值、深浅拷贝、移动构造、临时对象、万能引用、引用折叠、完美转发、可变参数模板、emplace/push 底层差异、性能差异、所有使用场景、所有误区、全套可运行代码 + 流程图。为什么深拷贝类型 emplace 会少一次移动构造?

2026-07-28 12:34:22 435 6

原创 C++可变参数模板与引用折叠精讲

标识是类型参数;...:包符号,核心标识,代表「多个、任意数量」;Args:参数包名(自定义),存储一组所有传入的类型。对比普通模板:普通模板:仅支持1个固定类型;参数包模板:支持0个、1个、任意多个任意类型。引用折叠:遇左则左,双双才右,是万能引用兼容左右值的核心;模板显式调用f1<int>(n)是手动指定模板类型,锁定函数参数类型,无推导、无折叠;模板参数包收纳任意数量、任意类型,是可变模板的核心;万能引用Args&& 结合折叠规则,完美转发所有参数;sizeof...

2026-07-22 21:43:39 390 4

原创 C++ 继承与多态完全详解

继承:子类拥有父类的所有属性和行为,并且可以扩展自己的新功能。父类(基类):通用、抽象、公共代码子类(派生类):特有、扩展、个性化代码当子类和父类有同名成员函数/变量子类函数会隐藏父类同名函数,父类函数在子类中不可见。多态:同一行为,不同表现。父类指针指向子类对象,调用函数时执行子类的方法。一旦类中出现virtual函数,编译器会自动生成一张虚函数表。每个对象内存中会多出一个虚表指针 vptr,指向本类的虚表。目的:代码复用、层级抽象构造:先父后子析构:先子后父开发只用public 继承。

2026-07-22 21:21:11 499 5

原创 Linux Makefile 超全详解:从原理、语法到企业级实战

make:是 Linux 内置的工程构建工具(命令行工具),负责解析规则、比对文件时间戳、自动执行编译/清理/打包等任务。Makefile:是make 工具的配置脚本文件,存放项目构建规则,定义「目标文件、依赖文件、执行命令」三者的关系。Makefile 是图纸,make 是工人;make 读取 Makefile,自动完成项目编译构建。注释:以开头,单行注释自定义变量变量名=值,取值$(变量名)变量优化版代码:统一管理编译器、编译参数、文件列表,方便后期修改# 自定义变量CC=gcc。

2026-07-22 20:42:03 349 6

原创 吃透C++ STL四大容器:Vector、List、Stack、Queue核心原理与实战用法

vector和list的核心区别:内存连续vs离散、支持随机访问vs不支持、查询快增删慢vs增删快查询慢、有内存冗余vs无冗余。stack/queue为什么是适配器:无独立底层结构,依赖其他容器实现功能,仅封装专属操作规则。vector迭代器失效场景:扩容、中间插入/删除元素,list仅删除节点迭代器失效。使用优先级:默认优先用vector,频繁中间增删用list,栈逻辑用stack,排队逻辑用queue。1.Vector:动态数组,内存连续,查询遍历王者,适合静态数据存储;2.List。

2026-07-08 11:04:35 422 4

原创 彻底吃透C++ Map迭代器:三种访问pair成员写法的底层原理

初学C++遍历map容器时,大家都会遇到一个经典问题:迭代器居然有三种合法的pair成员访问方式,且效果完全一致。while(it!cout << it->first << ":" // 写法1:箭头简写<< (*it).second << // 写法2:解引用+点号// 写法3:原生重载函数调用++it;本文从零拆解迭代器本质、运算符重载规则、地址与对象的区别,搭配流程图、对照表、底层伪代码,彻底根治迭代器认知误区。1. 迭代器是类对象,不是指针,依靠重载的operator*和。

2026-07-08 10:51:19 355 7

空空如也

空空如也

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

TA关注的人

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