通常认为,STL(标准模板库)的体系结构由六大核心组件构成:容器、算法、迭代器、函数对象、适配器和内存分配器。在这套体系中,迭代器、函数对象、适配器和内存分配器作为支撑性组件,共同为容器和算法这两个核心组件提供服务与协作支持。

容器是STL的基础,它如同各种规格的“智能储物箱”。这些模板类(如顺序容器vector、list,关联容器map、set)封装了底层数据结构,负责数据的存储、组织和管理,为用户提供了统一且安全的数据操作接口。

算法是STL的灵魂,它是独立于容器的“通用工具包”。超过100个算法模板函数(如排序sort、查找find、遍历for_each)被定义在<algorithm>等头文件中,它们不直接操作容器,而是通过迭代器进行数据处理,实现了算法与数据结构的彻底分离。

迭代器扮演着“通用桥梁”的角色。它抽象了访问容器元素的方式,无论是数组、链表还是树结构,算法都能通过统一的迭代器接口来读写数据。正是迭代器将容器和算法完美地连接在一起。

函数对象是“智能操作器”。任何重载了函数调用运算符()的类对象都成为函数对象(或称仿函数)。它比普通函数更强大,可以拥有自己的状态,常用于定制算法的比较准则或操作逻辑。

适配器是灵活的“接口转换器”。它能调整现有组件的接口形式,使其适应新的需求。常见的适配器有容器适配器(如用deque适配出stack)、迭代器适配器(如反向迭代器)和函数适配器。

内存分配器是底层的“内存管家”。它负责容器内存的分配与释放策略。对于大多数应用,默认分配器已足够高效;高级用户可以通过自定义分配器来实现内存池等特定优化。

STL一般都有一下头文件:

/*容器类头文件*/
#include <vector>        // 动态数组
#include <deque>         // 双端队列
#include <list>          // 双向链表
#include <forward_list>  // 单向链表 (C++11)
#include <array>         // 固定大小数组 (C++11)
#include <set>           // 有序集合
#include <map>           // 有序映射
#include <multiset>      // 可重复有序集合
#include <multimap>      // 可重复有序映射
#include <unordered_set>       // 哈希集合 (C++11)
#include <unordered_map>       // 哈希映射 (C++11)
#include <unordered_multiset>  // 可重复哈希集合 (C++11)
#include <unordered_multimap>  // 可重复哈希映射 (C++11)
#include <stack>          // 栈适配器
#include <queue>          // 队列和优先队列适配器
 
/*算法与工具类头文件*/
#include <algorithm>     // 通用算法(排序、查找、遍历等)
#include <numeric>       // 数值算法(累加、内积等)
#include <functional>    // 函数对象和适配器
#include <iterator>      // 迭代器支持
#include <memory>        // 智能指针和内存管理
#include <utility>       // 工具组件(pair、move等)
#include <tuple>         // 元组 (C++11)
#include <optional>      // 可选值 (C++17)
#include <variant>       // 类型安全联合 (C++17)
 
/*字符串与流头文件*/
#include <string>        // 字符串类
#include <sstream>       // 字符串流
#include <fstream>       // 文件流
#include <iostream>      // 标准输入输出流
 
/*其他重要头文件*/
#include <type_traits>   // 类型特性 (C++11)
#include <chrono>        // 时间库 (C++11)
#include <random>        // 随机数生成 (C++11)
#include <regex>         // 正则表达式 (C++11)
#include <atomic>        // 原子操作 (C++11)
#include <thread>        // 多线程支持 (C++11)
#include <mutex>         // 互斥锁 (C++11)
#include <future>        // 异步操作 (C++11)

总结:本节粗略介绍了STL的6大组件,以及分类介绍了所以头文件,让读者对STL基本框架一目了然。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)