STL(Standard Template Library)是C++的一个标准模板库,提供了丰富的数据结构和算法,可以大大简化C++程序员的工作,提高开发效率。下面是STL中常用的数据结构和算法:
1. 容器(Containers)
- vector:动态数组,支持快速访问和尾部插入/删除,内存连续,适合随机访问和尾部增删的情况。
- list:双向链表,支持快速插入/删除,适合元素数量不确定且需要频繁插入/删除的情况。
- set/multiset:红黑树,支持快速查找和有序遍历,不允许重复元素,multiset可以有重复元素。
- map/multimap:红黑树,支持快速查找和有序遍历,允许键值重复,multimap可以有重复键值。
- stack:栈,FILO(先进后出)结构,支持push/pop/top等操作。
- queue:队列,FIFO(先进先出)结构,支持push/pop/front/back等操作。
- priority_queue:优先队列,内部使用堆来实现,支持堆的操作,top元素为最大(最小)值。
2. 迭代器(Iterators)
迭代器是STL的一个核心特性,它将容器和算法分离开来,可以统一容器的遍历方式。STL提供了五种迭代器:
- 输入迭代器(Input Iterator):支持++、==、!=、*等操作。
- 输出迭代器(Output Iterator):支持++、*、=等操作。
- 前向迭代器(Forward Iterator):支持++、==、!=、*等操作,可用于遍历单向链表。
- 双向迭代器(Bidirectional Iterator):支持++、--、==、!=、*等操作,可用于遍历双向链表。
- 随机访问迭代器(Random Access Iterator):支持++、--、==、!=、*、[]、+、-、>、>=、<、<=等操作,可用于遍历动态数组。
3. 算法(Algorithms)
STL提供了多种常用算法,如排序、查找、遍历、比较、复制、移动等等。其中常用的算法包括:
- sort:排序,使用快速排序或归并排序等算法。
- binary_search:二分查找。
- for_each:遍历,对每个元素应用指定函数。
- count_if:计数,统计满足指定条件的元素数量。
- max_element/min_element:查找最大/最小元素。
- copy:复制,将一个容器的元素复制到另一个容器。
- remove_if:移除,移除满足指定条件的元素。
STL中的容器、迭代器和算法可以组合使用,例如对一个vector进行排序可以这样写:
#include
#include
using namespace std;
int main() {
vector
sort(v.begin(), v.end()); // 使用sort算法对vector进行排序
return 0;
}
使用STL可以方便地实现各种数据结构和算法,缩短开发时间,减少错误。