前言
本篇博客将详细介绍C++的STL
🖥 文章专栏:C++
若有问题 评论区见
🎉欢迎大家点赞👍收藏⭐文章
一:STL简介
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的
组件库,而且是一个包罗数据结构与算法的软件框架。
二:STL的六大组件
2.1容器
- 作用:存储和管理数据集合,提供不同的数据组织方式。
- 分类:
- 序列容器:元素按线性顺序排列(如
vector
,list
,deque
)。 - 关联容器:通过键(Key)快速查找数据(如
set
,map
,multiset
,multimap
)。 - 无序关联容器(C++11):基于哈希表实现(如
unordered_map
,unordered_set
)。 - 容器适配器:封装现有容器提供特定接口(如
stack
,queue
,priority_queue
)。
- 序列容器:元素按线性顺序排列(如
2.2算法
- 作用:对容器中的数据进行操作(如排序、查找、修改)。
- 特点:泛型设计,通过迭代器与容器解耦。
2.3迭代器
- 作用:提供一种统一的方式遍历容器中的元素。
- 分类(按功能递增):
- 输入/输出迭代器:单向遍历(如
istream_iterator
,ostream_iterator
)。 - 前向迭代器:单向但可多次遍历(如
forward_list
的迭代器)。 - 双向迭代器:支持双向遍历(如
list
的迭代器)。 - 随机访问迭代器:支持直接跳跃访问(如
vector
,deque
的迭代器)。
- 输入/输出迭代器:单向遍历(如
2.4空间配置器
- 作用:管理容器的内存分配与释放,通常默认使用
std::allocator
。 - 高级用法:可自定义分配器优化内存管理(如内存池)。
2.5 配接器
- 作用:对现有组件接口进行改造,提供新功能。
- 常见类型:
- 函数适配器(如
bind
绑定参数,C++11 后推荐用std::bind
或 Lambda)。 - 迭代器适配器(如
reverse_iterator
反向遍历)。 - 容器适配器(如
stack
基于deque
或list
实现)。
- 函数适配器(如
2.6仿函数
如:greater,less
三.STL的设计原则与特性
-
泛型编程(Generic Programming)
- 通过模板(Templates)实现与数据类型无关的代码。
- 示例:
vector<int>
和vector<string>
使用同一套代码逻辑。
-
时间复杂度保证
- 不同容器/算法的性能有明确约定(如
map
查找为 O(log n),unordered_map
为平均 O(1))。
- 不同容器/算法的性能有明确约定(如
-
迭代器解耦容器与算法
- 算法通过迭代器操作容器,无需知道容器内部结构。