stack、queue和priority_queue不以完整容器接口呈现,而是通过限制底层容器的操作,分别形成后进先出、先进先出和按优先级访问的数据结构。理解它们的关键是“容器适配器”:存储工作由底层容器完成,适配器负责提供受约束的接口和语义。
本文系统介绍三种适配器的接口、复杂度、底层容器要求、比较器规则、deque结构,以及最小栈、逆波兰表达式和第K大元 ...
std::list是节点式双向链表。它不提供随机访问,却能在已知位置以常数复杂度插入、删除和转移节点,并且结构修改通常不会让其他节点的迭代器失效。
本文从list的接口与复杂度讲到哨兵节点、双向迭代器和迭代器失效,并与vector进行工程化比较。文末通过一个教学版双向链表展示节点链接、插入、删除和迭代器封装。
一、list的结构与特点std::list& ...
std::vector是C++最常用的序列容器。它以连续内存保存元素,兼具随机访问、良好缓存局部性和摊销常数时间尾插。真正掌握vector,不仅要会调用push_back,还要理解size与capacity、扩容、元素搬移、迭代器失效以及为什么不能用memcpy复制一般对象。
本文从常用接口讲到实现原理,并给出一个基于分配器的教学版动态数组,以观察原始存储、 ...
std::string把字符序列、动态存储、长度管理和常用字符串操作封装在一个值类型中。它比C风格字符数组更容易复制、拼接、查找和传递,但仍需正确理解size、capacity、reserve、resize、c_str以及迭代器失效等规则。
本文系统整理std::string的构造、遍历、容量、修改、查找、截取、输入和C接口兼容方式,并通过一个教学版字符串类 ...
STL将常用数据结构和算法抽象成可复用组件,使程序员不必为每个项目重复实现动态数组、链表、排序、查找等基础设施。学习STL不能只停留在背接口,更重要的是理解容器的结构、算法的复杂度、迭代器的能力以及操作后的失效规则。
本文介绍STL的定位、六大组件及协作关系,梳理常用容器的选择原则、复杂度意识、线程安全边界和分阶段学习路线,并用一个可直接编译的示例演示容器、 ...
STL 容器不仅要组织元素,还要获取原始存储、在存储上构造对象、销毁对象并归还存储。分配器(allocator)把这些底层步骤从容器的数据结构逻辑中分离出来,使容器能够适配不同内存来源和资源策略。
经典教材常以 SGI STL 的一级、二级空间配置器为例,讲解小对象内存池、尺寸分类自由链表和内存不足处理。这套设计非常有学习价值,但它是特定历史实现,不是 C+ ...
STL 是 Standard Template Library 的缩写,即标准模板库。它以泛型编程为核心,把数据结构、遍历方式和处理算法拆分成可以自由组合的组件,使同一套算法能够处理不同容器。
学习 STL 不能只停留在记忆接口。真正重要的是理解容器特性、迭代器能力、算法前置条件、复杂度、失效规则以及六大组件之间如何协作。本文以整体知识框架为主线,对常用容器 ...
前言vector、list 和 deque 等容器主要按照元素的位置组织数据,属于序列式容器。map 和 set 则按照关键字组织数据,能够根据关键字快速完成查找、插入和删除,属于关联式容器。
本文将从 pair 开始,依次介绍 set、map、multiset 和 multimap 的使用,并继续分析它们与二叉搜索树、AVL 树和红黑树之间的关系。
本文主 ...
前言在前面的关联式容器中,map 和 set 通常借助红黑树组织数据,查找、插入和删除的时间复杂度为 O(log n),并且能够保持关键字有序。
C++11 又引入了一组无序关联式容器:
std::unordered_map;
std::unordered_set;
std::unordered_multimap;
std::unordered_multi ...
