初识STL
一 、STL的诞生
在C++发展早期,程序员在不同的项目中需要反复编写相似的数据结构和算法。重复开发带来以下问题:
代码冗余:每个项目都要重新实现基本数据结构和算法
维护困难:不同人编写的代码风格不一致,难以维护
效率低下:不同实现可能导致性能不稳定,难以优化
为了解决这些问题,1994年由Alexander Stepanov领导的团队开发了STL。
二、STL基本概念
- STL(标准模板库,Standard Template Library)
- 由多个模块组成,包括容器(Containers)、算法(Algorithms)和迭代器(Iterators),加上一些额外的工具
- 容器和算法之间通过迭代器进行无缝衔接
- STL几乎所有的代码都采用了模板类或者模板函数
三、 STL核心组件
STL主要由六大部分组成:容器、算法、迭代器、适配器、函数对象、配置器。
1.容器(Containers)
提供多种数据结构,方便存储和管理数据。常见容器包括:
容器类型 | 特点 | 常见容器 |
---|---|---|
序列式容器 | 按照顺序存储数据 | vector,deque,list,array |
关联式容器 | 以键值对存储数据,自动排序 | set,map,multiset,multimap |
无序容器 | 使用哈希表存储数据,查找快 | unordered_set,unordered_map |
2. 算法(Algorithms)
提供大量常见算法,如排序、查找、修改等,使用时结合迭代器。
常见算法:
- 修改类:fill()、replace()、copy()
- 非修改类:find()、count()
- 排序类:sort()、stable_sort()
- 数值类:accumulate()(求和)、inner_produce()(内积)
3. 迭代器(Iterators)
用于遍历容器中的元素,类似于指针,但更灵活,适用于STL容器。
迭代器类别 | 适用容器 | 功能 |
---|---|---|
输入迭代器 | istream_iterator | 只能读取 |
输出迭代器 | ostream_iterator | 只能写入 |
前向迭代器 | forward_list | 只能前进 |
双向迭代器 | list,set,map | 可前进和后退 |
随机访问迭代器 | vector,deque,array | 可随机访问 |
4. 适配器(Adapters)
用于改变容器、迭代器或函数行为的工具。例如:
- 容器适配器(
stack
、queue
、priority_queue
) - 迭代器适配器(
reverse_iterator
) - 函数适配器(
bind()
、mem_fn()
)
5、函数对象(Functors 仿函数)
是重载的类,可以像函数一样被调用。可作为算法的某种策略。
6、适配器(Allocators)
STL提供的内存管理机制,用于分配和释放内存。
四、 STL的特点
- 泛型编程
- 高效
- 模块化
- 代码复用