STL标准模板库
1. STL 简介
STL 全称是 Standard Template Library,叫做标准模板库。
它是 C++语言自带的一套强大工具库,里面包含了很多常用数据结构和算法,而且是模板化写的,非常灵活和高效!
可以理解成:
C++ 官方送给你的一个巨大的“百宝箱”,里面装满了各种你经常需要用的工具。
部分 | 举例 | 简单解释 |
---|---|---|
容器(Container) | vector , list , map , set | 负责存数据的,比如数组、链表、集合、字典等 |
算法(Algorithm) | sort , find , count , accumulate | 负责处理数据,比如排序、查找、统计、加总等 |
迭代器(Iterator) | 指针一样的东西 | 负责在容器中走来走去,访问或修改数据 |
2. STL 容器类别
(1)序列容器(Sequence Containers)
这些容器按照特定的顺序存储数据,可以通过位置访问数据。它们类似于“数组”或“链表”,但功能更强大。
容器 | 说明 | 访问方式 | 常见操作 |
---|---|---|---|
vector | 动态数组,大小可以改变 | 支持随机访问(operator[] 、at() ) | 快速插入尾部、访问元素、动态扩展大小 |
deque | 双端队列,可以从两端插入/删除 | 支持随机访问 | 快速在两端插入/删除 |
list | 双向链表,元素之间有指针 | 不支持随机访问,支持顺序访问 | 在任意位置插入/删除效率高 |
array | 固定大小的数组 | 支持随机访问 | 大小固定,不支持动态扩展 |
forward_list | 单向链表,只有一个方向的指针 | 不支持随机访问,顺序访问 | 比 list 更节省内存,适合单向遍历 |
(2)关联容器(Associative Containers)
这些容器通过键值对存储数据,并且自动保持元素的有序状态。一般用于查找操作非常高效。
容器 | 说明 | 常见操作 |
---|---|---|
set | 存储唯一的元素,按升序排列 | 查找、插入、删除、遍历 |
map | 存储键值对(key-value ),按键的顺序排列 | 查找、插入、删除、遍历 |
multiset | 存储可以重复的元素,按升序排列 | 查找、插入、删除、遍历 |
multimap | 存储可以重复的键值对,按键的顺序排列 | 查找、插入、删除、遍历 |
(3)容器适配器(Container Adapters)
容器适配器是对现有容器的一层封装,提供了不同的接口来满足特定的需求。常见的有栈、队列和优先队列。
容器 | 说明 | 常见操作 |
---|---|---|
stack | 栈,遵循“后进先出(LIFO)”原则 | push() , pop() , top() |
queue | 队列,遵循“先进先出(FIFO)”原则 | push() , pop() , front() , back() |
priority_queue | 优先队列,按优先级顺序存储元素 | push() , pop() , top() |
3. STL 迭代器类别
迭代器通过解引用操作 *it
访问元素
4. STL 算法类别
5. 泛型编程和宏
6. 函数模板
7. 类模板