标准模板库(STL)是C++的一个重要特性,它提供了一组模板类和函数,用于常见的数据结构和算法。STL主要包括以下几部分:
- 容器(Containers):
- 顺序容器(Sequence Containers):
vector
:可变大小数组,支持快速随机访问。deque
:双端队列,支持快速随机访问和在两端插入删除。list
:双向链表,支持快速插入和删除。forward_list
:单向链表,支持快速插入和删除,比list
更轻量级。array
:固定大小数组,不支持动态改变大小(C++11引入)。
- 关联容器(Associative Containers):
set
:集合,元素有序且唯一。multiset
:多重集合,元素有序但可以重复。map
:映射,键值对集合,键唯一,元素有序。multimap
:多重映射,键值对集合,键可以重复,元素有序。
- 无序关联容器(Unordered Associative Containers,C++11引入):
unordered_set
:无序集合,元素唯一。unordered_multiset
:无序多重集合,元素可以重复。unordered_map
:无序映射,键值对集合,键唯一。unordered_multimap
:无序多重映射,键值对集合,键可以重复。
- 容器适配器(Container Adapters):
stack
:栈,后进先出(LIFO)的数据结构。queue
:队列,先进先出(FIFO)的数据结构。priority_queue
:优先队列,元素可以按照自定义优先级排序。
- 顺序容器(Sequence Containers):
- 迭代器(Iterators):
- 输入迭代器(Input Iterators):提供对容器的只读访问。
- 输出迭代器(Output Iterators):提供对容器的只写访问。
- 前向迭代器(Forward Iterators):提供对容器的读写访问,并且可以单向遍历。
- 双向迭代器(Bidirectional Iterators):提供对容器的读写访问,并且可以双向遍历。
- 随机访问迭代器(Random Access Iterators):提供对容器的读写访问,并且可以随机访问。
- 算法(Algorithms):
- 查找算法:如
find
、find_if
、binary_search
等。 - 排序算法:如
sort
、stable_sort
、partial_sort
等。 - 替换和填充算法:如
replace
、fill
、generate
等。 - 变序算法:如
reverse
、rotate
、next_permutation
等。 - 删除算法:如
remove
、unique
、erase
等。 - 分区算法:如
partition
、stable_partition
等。 - 数值算法:如
accumulate
、inner_product
、partial_sum
等。
- 查找算法:如
- 函数对象(Function Objects):
- 算术运算函数对象:如
plus
、minus
、multiplies
等。 - 关系运算函数对象:如
equal_to
、not_equal_to
、less
等。 - 逻辑运算函数对象:如
logical_and
、logical_or
、logical_not
等。
- 算术运算函数对象:如
- 适配器(Adapters):
- 函数适配器:如
bind
、function
、mem_fn
等(部分在C++11及以后的标准中)。 - 迭代器适配器:如
reverse_iterator
、insert_iterator
等。
- 函数适配器:如
STL的设计非常灵活和通用,使得它能够应用于各种不同的编程场景和问题。通过使用STL,C++程序员可以避免重复编写常见的数据结构和算法,从而提高开发效率和代码质量。