C++ 的标准模板库(Standard Template Library,简称 STL)是一组由 C++ 标准委员会制定的模板类和函数,用于实现常见的数据结构和算法STL。STL 的设计目的是提供高性能、通用且易于使用的数据结构和算法,使得程序员能够更方便地进行开发工作。
STL 主要由以下几部分组成:
容器(Containers):
- 序列容器(Sequence Containers):如 vector、deque、list 和 array,这些容器存储元素序列,允许通过索引或迭代器访问元素。
- 关联容器(Associative Containers):如 set、multiset、map 和 multimap,这些容器存储键值对,并自动按键排序。
- 无序容器(Unordered Containers):如
unordered_set、unordered_multiset、unordered_map 和 unordered_multimap,这些容器存储键值对,但不保证顺序,通常使用哈希表实现。 - 容器适配器(Container Adapters):如 stack、queue 和 priority_queue,这些适配器将其他容器(如
deque 或 vector)封装为特定类型的数据结构。
迭代器(Iterators):
迭代器是一种用于遍历容器中的元素的对象。STL 提供了多种迭代器类型,包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。
算法(Algorithms):
STL 提供了丰富的算法,用于对容器中的元素进行各种操作,如排序、查找、复制、替换、变换和生成等。这些算法分为非修改序列算法、修改序列算法、排序算法和二分查找算法等。
函数对象(Function Objects):
函数对象(也称为仿函数)是重载了 operator() 的对象或类,它们可以像函数一样被调用。STL 中的许多算法都使用函数对象来指定操作细节。
适配器(Adapters):
除了容器适配器外,STL 还提供了迭代器适配器和函数适配器,用于改变迭代器或函数对象的行为。
STL 的设计哲学是“泛型编程”,即通过使用模板来编写与类型无关的代码。这使得 STL 组件可以高效地处理各种数据类型,而无需对每种类型都编写专门的代码。
使用 STL 的好处包括:
提高代码重用性:STL 提供了许多通用的数据结构和算法,减少了重复代码。
提高开发效率:使用 STL 可以快速构建复杂的数据结构和算法,而无需从头开始编写。
提高代码可读性:STL 的命名规范和文档使得代码更加易于理解和维护。
性能优化:STL 组件经过高度优化,通常比手写代码更高效。
STL(标准模板库)中的常用函数涵盖了多个方面,包括容器操作、迭代器操作、算法等。以下是一些常用的STL函数及其简要说明:
- 容器操作函数
push_back()
功能:在容器末尾添加元素。
适用容器:vector、deque、list等。
pop_back()
功能:删除容器末尾的元素。
适用容器:vector、deque、list等。
insert()
功能:在容器的指定位置插入一个或多个元素。
适用容器:所有STL容器。
erase()
功能:删除容器中的元素,可以是单个元素或指定范围内的元素。
适用容器:所有STL容器。
clear()
功能:清空容器中的所有元素。
适用容器:所有STL容器。
size()
功能:返回容器中元素的个数。
适用容器:所有STL容器。
empty()
功能:检查容器是否为空。
适用容器:所有STL容器。
resize()
功能:调整容器的大小,如果容器变长,则以默认值填充新位置;如果容器变短,则删除末尾超出容器长度的元素。
适用容器:vector、deque等。
- 迭代器操作函数
begin()
功能:返回指向容器第一个元素的迭代器。
适用容器:所有STL容器。
end()
功能:返回指向容器最后一个元素之后位置的迭代器。
适用容器:所有STL容器。
rbegin()
功能:返回指向容器最后一个元素的反向迭代器。
适用容器:支持反向迭代的容器,如vector、deque等。
rend()
功能:返回指向容器第一个元素之前位置的反向迭代器。
适用容器:支持反向迭代的容器。
- 算法函数
sort()
功能:对容器中的元素进行排序。
适用容器:支持随机访问迭代器的容器,如vector、deque等。
find()
功能:在容器中查找指定元素。
适用容器:所有STL容器。
count()
功能:统计容器中指定元素出现的次数。
适用容器:所有STL容器。
for_each()
功能:对容器中的每个元素执行指定操作。
适用容器:所有STL容器。
unique()
功能:从容器中删除连续重复的元素,返回新逻辑末尾的迭代器。
注意:原数组不会缩小,需要手动截取有效数组段。
适用容器:支持随机访问迭代器的容器。
reverse()
功能:反转容器中元素的顺序。
适用容器:支持随机访问迭代器的容器,或可以通过迭代器进行反向遍历的容器。
fill()
功能:将容器中指定范围内的元素设置为指定值。
适用容器:所有STL容器。
lower_bound()
功能:返回指向容器中第一个不小于指定值的元素的迭代器。
适用容器:支持随机访问迭代器的有序容器。
upper_bound()
功能:返回指向容器中第一个大于指定值的元素的迭代器。
适用容器:支持随机访问迭代器的有序容器。
- 特定容器函数
stack
push(ele):元素ele入栈。
pop():移除栈顶元素。
top():取得栈顶元素(但不删除)。
empty():检测栈内是否为空。
size():返回栈内元素的个数。
queue
front():返回队首元素。
back():返回队尾元素。
push(element):尾部添加一个元素element进队。
pop():删除第一个元素出队。
size():返回队列中元素个数。
empty():判断是否为空。
priority_queue
top():访问队首元素(优先级最高的元素)。
push():入队。
pop():堆顶(队首)元素出队。
size():队列元素个数。
empty():是否为空。