c++:标准模板库 STL(Standard Template Library)
定义:STL(Standard Template Library) 是 C++ 标准库的一部分,它是一套使用模板技术实现的通用 数据结构和算法库。可以理解为:“一个高度模块化、高性能、高度泛型的编程工具箱。它实现了大量经典数据结构(如:数组、链表、栈、队列、哈希表、平衡树等)和常用算法(如:排序、查找、复制、替换等)。
目录
🔹 1. 顺序容器(Sequential Containers)
🔹 2. 关联容器(Associative Containers)— 基于红黑树
🔹 3. 无序容器(Unordered Containers)— 基于哈希表
🧱 一、什么是 STL?
定义:
STL(Standard Template Library) 是 C++ 标准库的一部分,它是一套使用模板技术实现的通用 数据结构和算法库。
可以理解为:
“一个高度模块化、高性能、高度泛型的编程工具箱。”
它实现了大量经典数据结构(如:数组、链表、栈、队列、哈希表、平衡树等)和常用算法(如:排序、查找、复制、替换等)。
🌲 二、STL 三大核心组成
STL 是由三大部分构成的:
| 组件 | 作用 | 举例 |
|---|---|---|
| 容器(Containers) | 用来存放数据 | vector, list, map |
| 算法(Algorithms) | 操作容器里的数据 | sort, find, count |
| 迭代器(Iterators) | 用来遍历容器 | it = v.begin(); ++it |
👉 这三者可以组合使用,例如对 vector 排序就用:std::sort(v.begin(), v.end());
📦 三、容器(Containers)
容器是用来装数据的,就像一个个不同的容器:桶、箱子、抽屉……
STL 容器分为几类:
🔹 1. 顺序容器(Sequential Containers)
| 容器 | 特点 | 适用场景 |
|---|---|---|
vector |
动态数组 | 最常用,支持随机访问 |
list |
双向链表 | 插入/删除快,但不能随机访问 |
deque |
双端队列 | 两端插入删除都快 |
array |
固定长度数组(C++11) | 更安全的静态数组 |
🔹 2. 关联容器(Associative Containers)— 基于红黑树
| 容器 | 特点 |
|---|---|
set |
只存 key,自动排序 |
map |
键值对,自动排序 |
multiset / multimap |
允许重复 key |
🔹 3. 无序容器(Unordered Containers)— 基于哈希表
| 容器 | 特点 |
|---|---|
unordered_set |
哈希集合,查找快,不排序 |
unordered_map |
哈希表,键值对查找快 |
unordered_multimap |
哈希多键 |
⚙️ 四、算法(Algorithms)
STL 提供了 70 多个算法,可以对容器中的数据进行操作:
常用算法分类:
| 类型 | 代表函数 | 说明 |
|---|---|---|
| 排序类 | sort, stable_sort |
快速排序 |
| 查找类 | find, binary_search |
顺序查找 / 二分查找 |
| 修改类 | reverse, replace, fill |
数据修改 |
| 统计类 | count, accumulate |
个数、和等 |
| 变换类 | transform, copy, remove_if |
创建新数据 |
示例:
std::vector<int> v = {1, 5, 2, 4};
std::sort(v.begin(), v.end()); // 排序
std::reverse(v.begin(), v.end()); // 逆序
int sum = std::accumulate(v.begin(), v.end(), 0); // 求和
🔁 五、迭代器(Iterators)
迭代器就像指针,用来访问容器的元素。
常见类型:
| 类型 | 用法 |
|---|---|
begin() / end() |
遍历容器开头到结尾 |
rbegin() / rend() |
反向遍历 |
const_iterator |
只读迭代器 |
auto |
自动类型推导(推荐) |
std::vector<int> v = {1, 2, 3};
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}
或者使用现代写法:
for (auto x : v) {
std::cout << x << " ";
}
🛠️ 六、STL 配合泛型编程的威力
STL 之所以强大,是因为它用的是 模板(template)技术,容器和算法都可以作用于任何类型的数据。
比如:
std::vector<std::string> names;
std::map<int, std::vector<double>> data;
🧩 七、STL 使用图解结构
+-----------------------+
| STL 总结构 |
+-----------------------+
/ | \
/ | \
容器 (vector/map) 算法 (sort/find) 迭代器 (*it)
容器储存数据 ➜ 算法操作数据 ➜ 迭代器在二者之间做“桥梁”
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)