stl
文章平均质量分 83
Ricky_Theseus
一个普通人类
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ STL之filesystem文件系统库详解
本文详细介绍了C++17标准库中的filesystem文件系统功能。主要内容包括:filesystem从Boost库到标准库的发展历程;核心path类的路径表示和规范化操作;directory_entry的缓存机制提升性能;两种目录遍历迭代器(directory_iterator和recursive_directory_iterator)的使用方法;磁盘容量查询接口space_info;以及文件复制操作copy及其选项配置。文章通过代码示例和流程图展示了这些功能在跨平台文件操作中的实际应用,帮助开发者理解如原创 2026-07-03 07:53:23 · 319 阅读 · 0 评论 -
C++ STL 之 string_view 详解
本文详细介绍了C++17引入的string_view特性,它解决了字符串参数传递时的隐式构造和拷贝开销问题。作为非拥有型的字符串视图,string_view只保存指针和长度,构造和拷贝均为O(1)复杂度。文章比较了string_view与const string&的使用场景,强调函数形参应优先使用string_view,但需注意其不管理生命周期可能导致的悬垂指针问题。同时提供了常用接口说明、C++20新增功能、安全使用原则以及6道典型面试题解析,最后总结了两种方式的特性对比和使用建议。原创 2026-07-03 07:53:18 · 305 阅读 · 0 评论 -
C++ STL之deque详解:从使用到底层,再到面试八股
摘要:C++ STL deque详解 deque是一种双端队列容器,支持高效的两端操作(O(1))。它采用分段连续存储结构,由多个固定大小的内存块和中控指针数组组成,既不是完全连续也不是完全离散。特性包括: 支持快速随机访问(两步寻址) 两端插入/删除高效 中间操作较慢(O(n)) 相比vector没有capacity概念 提供完整迭代器支持(包括随机访问) 典型应用场景:需要频繁两端操作的队列/栈 面试要点:强调其分段连续的结构设计,解释为何两端操作高效而中间操作较慢,以及与vector/list的主要区原创 2026-07-03 07:53:10 · 371 阅读 · 0 评论 -
C++ STL 之 allocator 与内存池详解
本文深入解析了C++ STL中的allocator与内存池机制: allocator作用:解耦内存分配与对象构造,解决频繁小对象分配的性能问题。 std::allocator:默认分配器实现,通过allocate/deallocate管理内存,使用placement new构造对象。 SGI二级分配器:采用16条自由链表管理8-128字节内存块,使用内存池和嵌入式指针优化小对象分配。 allocator_traits:C++11引入的通用接口,简化自定义分配器实现。 PMR机制:C++17提供的多态内存资源原创 2026-07-01 10:01:30 · 503 阅读 · 0 评论 -
C++ STL之array、pair与tuple详解:从使用到底层,再到面试八股
C++ STL容器array、pair与tuple使用指南 本文介绍了C++标准模板库中的三种重要容器: std::array 固定大小的连续容器,编译期确定大小 栈上分配内存,性能接近原生数组 提供at()安全访问、迭代器支持、fill()等方法 与vector最大区别:array全在栈上,vector数据在堆上 std::pair 将两个值打包为一个类型 支持结构化绑定和piecewise_construct优化构造 piecewise_construct避免临时对象拷贝,直接原地构造 std::tup原创 2026-07-01 10:01:19 · 311 阅读 · 0 评论 -
C++ STL 之 atomic 与内存序详解
本文介绍了C++ STL中的std::atomic及其内存序机制: std::atomic提供无锁的线程安全访问,要求模板类型必须是trivially copyable 核心操作包括load/store/exchange/CAS等原子操作 详细解析了6种内存序,从relaxed到seq_cst,说明其可见性约束差异 通过图表展示了CAS工作流程和内存序的可见性传递 讨论了lock-free特性和ABA问题 文章通过代码示例和图表,系统性地讲解了原子操作在多线程编程中的正确使用方法。原创 2026-07-01 10:01:09 · 549 阅读 · 0 评论 -
C++ STL之bitset位操作详解:从使用到底层,再到面试八股
摘要 C++ STL中的bitset是一个编译期定长的位集容器,提供高效位操作。文章从基本用法、核心特性到面试题全面解析bitset: 基本用法:包括初始化、位访问/修改、位运算和类型转换,展示bitset的紧凑存储和高效操作特性。 核心特性:编译期定长设计,栈上存储无堆分配,相比vector<bool>有更优的性能和内存效率。 典型应用:通过统计1的个数、二进制翻转、质数筛等案例,演示bitset的实际应用场景和性能优势。 面试重点:包含常见位操作问题及bitset解法,如判断2的幂、统计1的个数等,突出原创 2026-07-01 10:00:52 · 436 阅读 · 0 评论 -
C++ STL之sort系列深度剖析:从使用到底层,再到面试八股
C++ STL排序算法指南 摘要:本文系统介绍了C++ STL中的主要排序算法及其应用场景。std::sort作为最通用的排序函数,默认升序且不稳定;stable_sort保持相等元素原始顺序但需要额外内存;partial_sort仅保证前k个元素有序;nth_element快速找到第k大元素;partial_sort_copy将排序结果写入新容器。此外还介绍了is_sorted/is_sorted_until用于检查有序性,以及C++20的ranges版本。文章提供了各算法的复杂度、内存占用比较表,并给出原创 2026-06-30 09:06:42 · 408 阅读 · 0 评论 -
C++ STL之set/multiset详解:从使用到底层,再到面试八股
本文详细介绍了C++ STL中的set和multiset容器的使用方法和底层原理。主要内容包括:容器的初始化、插入操作(insert返回值特性)、删除操作(erase的不同用法)、查找方法(find/count/contains)、边界查询(lower_bound/upper_bound/equal_range)以及遍历方式。特别强调了set自动去重和排序的特性,multiset允许重复元素的区别,以及二者在不同操作上的表现差异。文章还提供了常用函数的时间复杂度参考,适合面试准备和日常开发查阅。原创 2026-06-30 09:06:16 · 380 阅读 · 0 评论 -
C++ STL之std::function与可调用对象包装详解
本文详细介绍了C++ STL中的std::function及其相关工具,主要内容包括: 用法速查:展示了如何用std::function包装自由函数、函数对象、Lambda、成员函数等各类可调用对象,并介绍了std::bind、std::mem_fn、std::not_fn和std::bind_front的用法。 底层原理: 类型擦除机制和桥接模式实现 小对象优化(SBO)与堆分配的触发条件 std::bind的占位符与延迟求值特性 Lambda与std::function的对比:Lambda是编译期生成的原创 2026-06-30 09:06:06 · 220 阅读 · 0 评论 -
C++ STL 之 std::format 与 std::print 详解
本文介绍了C++20引入的<format>和C++23引入的<print>特性,这些特性源自开源库{fmt}。文章比较了传统的C风格sprintf、iostream和现代格式化工具,重点分析了std::format和std::print的设计动机、语法特性、性能优势及类型安全性。 主要内容包括: 背景介绍,说明传统格式化工具的局限性 详细解析std::format的格式说明符语法和用法 对比std::format(返回字符串)与std::print(直接输出)的适用场景 强调编译期类型检查和错误检测机制 性原创 2026-06-30 09:05:49 · 379 阅读 · 0 评论 -
C++ STL 之 stack、queue 与 priority_queue 详解:用法速查 → 底层原理 → 面试题
本文详细介绍了C++ STL中的三种容器适配器:stack、queue和priority_queue。内容分为三部分:用法速查、底层原理和面试题解析。 用法部分展示了三种容器的基本操作:stack的LIFO特性、queue的FIFO特性,以及priority_queue的优先级队列特性,包括自定义比较器和底层容器的方法。 底层原理部分解释了容器适配器的设计模式,分析了默认使用deque和vector的原因,并揭示了priority_queue通过隐式二叉堆实现的机制。 文章采用实用导向的结构,先展示用法,再原创 2026-06-30 09:02:36 · 343 阅读 · 0 评论 -
C++ STL 之随机数生成详解
C++ STL随机数生成详解:弃用C的rand(),改用C++11的<random>库 C的rand()存在周期短、低位不随机、无分布抽象三大缺陷。C++11采用引擎+分布双层架构解决这些问题:引擎负责生成随机比特流(推荐mt19937梅森旋转算法),分布将比特流映射为特定分布数值。关键特性包括:均匀分布整数、正态分布、伯努利分布等标准分布实现;真种子初始化方法;线程安全注意事项。相比rand(),STL随机数库具有更长周期、无偏分布、丰富数学分布支持等优势,是C++中生成随机数的标准方案。原创 2026-06-29 09:59:48 · 275 阅读 · 0 评论 -
C++ STL 之 optional、variant 与 any 详解
C++17引入的optional、variant和any填补了类型系统三大短板:optional表达可能无值的语义(如解析结果),variant提供类型安全的联合体(固定几种类型中的一种),any实现类型擦除的通用容器(持有运行时确定的任意类型)。optional通过额外bool标记实现无值状态,variant使用visit编译期分派提高效率,any则通过类型擦除支持动态类型但性能开销较大。选型应根据具体需求:已知类型可能无值用optional,固定几种类型用variant,完全动态类型才用any。这些工具原创 2026-06-29 09:59:45 · 621 阅读 · 0 评论 -
C++ STL之互斥锁与条件变量详解
本文详细介绍了C++ STL中的互斥锁与条件变量机制。主要内容包括: 互斥锁类型:基础mutex、可重入recursive_mutex、带超时的timed_mutex以及C++17的读写锁shared_mutex,分析各自特性与适用场景。 RAII锁包装器:lock_guard实现简单作用域锁,unique_lock提供更灵活的锁管理,scoped_lock解决多锁死锁问题。 条件变量:配合unique_lock使用,解释虚假唤醒现象及必须使用循环检查的原因。 死锁机制:分析死锁四个必要条件及预防策略。 常原创 2026-06-29 09:59:41 · 639 阅读 · 0 评论 -
C++ STL 之 list 与 forward_list 详解:用法→原理→面试
本文详细介绍了C++ STL中的链表容器list和forward_list的使用方法、核心原理及面试要点。list是双向链表,forward_list是单向链表,主要优势是O(1)时间复杂度的任意位置插入/删除操作。 内容分为三部分:首先讲解初始化、元素访问、增删改查等基础用法;然后重点解析list的核心操作splice,它能在O(1)时间内移动节点;最后给出面试常见问题的解答。文中包含大量代码示例和图解说明,特别适合C++开发者系统学习链表容器的特性和底层实现原理。 (字数:150字)原创 2026-06-29 09:59:37 · 364 阅读 · 0 评论 -
C++ STL 之 iostream 深度解析
iostream 是 C++ 标准库中最古老也最复杂的组件之一。理解了 tie / sync_with_stdio 的机制、binary 与 text 模式差异、stringstream 的拷贝陷阱、streambuf 的接口分层,以及 endl 与 ‘\n’ 的本质区别,才算真正掌握了它的设计哲学。而随着<format>在 C++20 落地,iostream 的角色正在从「格式化 + IO」逐渐退化为「纯 IO 层」,但这并不影响它至今仍是 C++ 开发者手写代码时最频繁使用的库。原创 2026-06-29 09:56:31 · 514 阅读 · 0 评论 -
C++ STL之std::thread与异步编程详解
C++ STL异步编程核心组件解析 本文介绍了C++ STL中异步编程的核心组件及其原理。主要内容包括: std::thread:基础线程类,构造即启动,必须显式join或detach以避免析构时terminate,推荐使用RAII包装确保线程安全管理。 std::async:封装异步任务,支持立即执行(launch::async)或延迟计算(launch::deferred),自动管理线程生命周期,返回future对象获取结果。 future/promise机制:通过共享状态实现线程间值传递,promis原创 2026-06-28 09:05:28 · 254 阅读 · 0 评论 -
C++ STL之异常安全与noexcept详解
这篇文章深入解析了C++标准模板库(STL)中的异常处理机制与noexcept关键字。主要内容包括: C++异常层次结构:基于std::exception构建的标准异常体系,包括逻辑错误(logic_error)和运行时错误(runtime_error)两大类。 noexcept详解:介绍noexcept说明符的语法和作用,及其对STL容器性能的影响,特别是vector扩容时的移动/拷贝策略选择。 异常安全三保证:nothrow(绝不抛异常)、strong(全成功或回滚)、basic(不泄漏资源)三个级别的原创 2026-06-28 09:05:18 · 317 阅读 · 0 评论 -
C++ STL 之 type_traits 与 Concepts 详解
本文深入解析了C++ STL中的type_traits与Concepts技术,内容分为四部分: 核心type_traits速查:介绍类型查询(is_same/is_base_of)、类型变换(remove_reference/decay)和编译期分支(conditional)等工具的使用方法。 SFINAE机制:讲解替换失败非错误的原理,重点演示enable_if和void_t的典型应用,包括成员探测技巧。 C++20 Concepts:详细说明概念定义、标准概念(same_as/convertible_t原创 2026-06-28 09:04:45 · 343 阅读 · 0 评论 -
C++ STL 之 latch / barrier / semaphore 详解(C++20 并发新原语)
latch/barrier/semaphore 填补了 C++11 标准库在同步原语上的空白。它们比手写条件变量方案更简洁、性能更好(无虚假唤醒、原子操作更快),并且语义明确、不易出错。在新项目中,凡是遇到"等待 N 个线程"或"限制并发数量"的需求,优先考虑这三个标准原语。原创 2026-06-28 09:03:33 · 330 阅读 · 0 评论 -
C++ STL之排列组合与洗牌详解:从使用到底层,再到面试八股
C++ STL排列组合与洗牌算法摘要 本文全面介绍了C++ STL中排列组合和洗牌相关算法的使用与原理。 核心算法: next_permutation/prev_permutation:基于字典序的排列生成算法,通过找交换点-交换-反转实现,均摊O(1)复杂度 shuffle:使用Fisher-Yates/Knuth算法实现真正的随机洗牌,复杂度O(n) sample:C++17新增的无放回采样功能,保证O(n)时间 关键点: 使用排列算法前必须确保输入序列已按目标顺序排序 random_shuffle因随原创 2026-06-28 09:02:33 · 368 阅读 · 0 评论 -
C++ STL之容器选型圣经
场景容器默认首选vector头尾频繁操作deque大量中间插入删除list有序键值对map高速键值对小数据量静态数组array优先级调度性能优化的第一原则不是换容器,而是选对容器。原创 2026-06-27 10:15:51 · 210 阅读 · 0 评论 -
C++ STL 二分查找算法族详解
本文详解C++ STL中的二分查找算法族,包括binary_search、lower_bound、upper_bound和equal_range。核心要点: 使用前提:输入区间必须已排序,否则结果不可靠 四函数差异: binary_search:判断值是否存在 lower_bound:返回首个≥值的位置 upper_bound:返回首个>值的位置 equal_range:返回[lower, upper)区间 底层原理:基于同一二分框架,通过不同比较条件实现功能差异 逆序场景需自定义比较器 C++20提供ra原创 2026-06-27 10:14:59 · 313 阅读 · 0 评论 -
C++ STL之数值算法与Lambda详解:从使用到底层,再到面试八股
本文介绍了C++ STL中的数值算法和Lambda表达式。数值算法部分涵盖accumulate、reduce、inner_product、adjacent_difference、partial_sum和iota等常见操作,重点说明其用法、注意事项(如int溢出问题)和并行计算特性。Lambda表达式部分详细解析了基本语法、捕获方式(值捕获和引用捕获)以及mutable关键字的使用场景。全文采用"先调用-再原理-后面试"的结构,适合开发者快速查阅和面试准备,内容涵盖日常开发中的常见陷阱和优化技巧。原创 2026-06-27 10:13:50 · 369 阅读 · 0 评论 -
C++ STL 之 initializer_list、结构化绑定与 if constexpr 详解
本文介绍了现代C++(C++11~C++20)中的三个关键特性:std::initializer_list、结构化绑定和if constexpr。initializer_list是只读数组的语法糖,统一了初始化方式但需注意隐式转换陷阱;结构化绑定(C++17)简化了解包tuple、数组和结构体的操作,提供三种绑定模式;if constexpr实现了编译期分支,消除了SFINAE的复杂性,使模板代码更简洁。这些特性在日常STL使用中频繁出现,理解其原理有助于避免潜在问题。原创 2026-06-27 10:09:27 · 371 阅读 · 0 评论 -
C++ STL 之源码阅读路线
C++ STL源码阅读指南 本文提供了一份高效的C++ STL源码阅读路线图,基于GCC最新实现。内容摘要: 阅读路线:推荐从序列容器(vector/list/deque)开始,再到关联容器(map/set)和算法,最后学习分配器 源码结构: .h文件包含类定义和内联实现 .tcc文件包含长模板函数实现 关键文件分散在bits/目录下 核心实现: vector使用2倍扩容策略 deque通过中控器实现分段连续空间 关联容器基于红黑树实现 编译过程:STL是纯模板库,代码在实例化时展开 面试要点:包含7个常见原创 2026-06-27 10:08:08 · 390 阅读 · 0 评论 -
C++ STL之正则表达式详解
本文介绍了C++ STL中正则表达式库(regex)的核心用法和底层原理,主要内容包括: 基础用法速查:展示了regex_match、regex_search和regex_replace的基本用法,包括捕获组的使用和替换字符串中的引用方式。 底层原理: 默认使用ECMAScript语法子集,支持字符类、量词、分组等基本特性 详细比较了regex_match(全匹配)、regex_search(部分匹配)和regex_replace(替换)的区别 解释了smatch/sub_match对象的结构和捕获组访问方原创 2026-06-26 08:38:45 · 301 阅读 · 0 评论 -
C++ STL 之智能指针详解:用法 × 原理 × 面试
本文详细介绍了C++ STL中的智能指针用法与原理。主要内容包括: unique_ptr:独占所有权,禁止拷贝只支持移动,通过EBO优化实现零开销; shared_ptr:基于引用计数共享所有权,底层采用控制块结构管理双计数模型; weak_ptr:弱引用,用于打破循环引用,通过lock()升级为shared_ptr; enable_shared_from_this:安全返回this指针的机制。 文章采用三段式结构:先演示用法,再剖析设计原理,最后提供面试解答思路。重点分析了智能指针的内存布局、引用计数机制原创 2026-06-26 08:37:44 · 422 阅读 · 0 评论 -
C++ STL之vector详解:从使用到底层,再到面试八股
摘要: 本文全面介绍C++ STL中的vector容器,涵盖从基础使用到底层原理,再到面试常见问题。内容分为三部分:1)使用指南,包括初始化、元素访问、大小操作、增删元素和遍历方法;2)底层原理,解析vector的动态数组实现、连续内存特性与扩容机制,对比不同编译器的扩容策略差异(GCC 2倍 vs MSVC 1.5倍);3)面试技巧,提供常见问题的简明解答方案。文章通过代码示例和内存模型图示,帮助读者深入理解vector的高效实现原理,同时满足日常开发和面试准备的双重需求。原创 2026-06-26 08:36:21 · 382 阅读 · 0 评论 -
C++ STL 之移动语义详解
本文系统讲解了C++ STL中的移动语义机制,分为三部分:用法速查、底层原理和面试题。主要内容包括:std::move仅类型转换为右值引用,真正移动由构造/赋值完成;移动构造必须声明noexcept以保证容器安全;完美转发std::forward保持参数值类别;移动后对象状态有效但未指定。底层原理部分解析了引用折叠规则和std::move/forward的实现机制,并比较了C++17的RVO/NRVO优化。最后提供了3个典型面试题的标准答案,重点强调移动语义的核心概念和使用注意事项。原创 2026-06-26 08:34:10 · 355 阅读 · 0 评论 -
C++ STL 之迭代器体系详解
C++ STL 迭代器体系摘要 C++ STL 迭代器作为算法与容器的桥梁,主要包含六大类别和四大适配器。迭代器通过标签分派在编译期决定算法路径,适配器统一了不同操作接口。核心内容包括: 迭代器适配器: 插入迭代器(back/front/inserter)将赋值转为插入操作 流迭代器包装I/O流为迭代器接口 反向迭代器实现逆向遍历 移动迭代器(C++11)支持资源转移 六大迭代器类别: 输入/输出迭代器(单次遍历) 前向迭代器(多次单向遍历) 双向迭代器(支持逆向遍历) 随机访问迭代器(支持随机跳转) 连续原创 2026-06-26 08:32:55 · 314 阅读 · 0 评论 -
C++STL之unordered_map详解
本文详细介绍了C++ STL中的unordered_map容器,涵盖使用方法和底层实现原理。主要内容包括: 基本操作:插入、查找、删除和遍历等常用方法,强调元素无序存储特性。 底层原理:基于哈希表实现,使用链地址法解决冲突。重点讲解负载因子、rehash机制及其性能影响,以及迭代器失效问题。 性能优化:区分reserve和rehash的差异,推荐使用reserve预分配空间避免频繁rehash。 自定义类型支持:提供两种自定义哈希函数的方法,并强调必须同时定义相等比较函数。 面试知识点:对比链地址法与开放寻原创 2026-06-25 16:01:24 · 308 阅读 · 0 评论 -
STL 常用容器
默认底层:vector。默认底层:deque。默认底层:deque。原创 2026-06-25 10:03:00 · 155 阅读 · 0 评论 -
C++ STL之map详解:从使用到底层,再到面试八股
/ 降序map// 自定义结构体做key——必须重载 operator<int x, y;if (x!// C++11 lambda 比较器operator<原创 2026-06-20 17:59:09 · 389 阅读 · 0 评论 -
C++ STL之string详解:从使用到底层,再到面试八股
短字符串优化。字符串长度不超过阈值(gcc 15)时,数据直接存在string对象内部的栈空间里,不需要堆分配。比如,五个字符,零堆分配。原创 2026-06-20 17:24:00 · 490 阅读 · 0 评论 -
vector push_back 均摊 O(1) 原理
的push_back,但。原创 2026-05-08 17:28:46 · 261 阅读 · 0 评论 -
vector 与 list 区别 + 使用场景
]at()原创 2026-05-08 17:22:02 · 54 阅读 · 0 评论
分享