在C++编程中,STL(Standard Template Library,标准模板库)是一组高效、泛型的容器、算法和迭代器的集合,极大地提高了程序的可重用性和开发效率。本篇将详细介绍C++ STL中的一些关键容器,如priority_queue、stack、queue、map、vector、list、deque以及它们的基本操作。
1. **priority_queue**: 优先队列,顾名思义,它是一种特殊的队列,其中的元素根据某种优先级进行排序。默认情况下,最高优先级的元素位于队列顶部,当队列被删除元素时,优先级最高的元素会被首先删除。例如,`priority_queue<int>`可以用来存储整数,且每次弹出的是最大值。
2. **stack**: 栈是一种后进先出(LIFO, Last In First Out)的数据结构。在C++中,`stack`类实现了栈的抽象数据类型。你可以使用`push`向栈顶添加元素,使用`pop`移除并返回栈顶元素,`top`获取栈顶元素但不删除,以及`empty`检查栈是否为空。
3. **queue**: 队列是一种先进先出(FIFO, First In First Out)的数据结构。`queue`类提供了队列的操作,包括`push`向队列尾部插入元素,`pop`移除并返回队头元素,`front`访问队头元素,以及`empty`检查队列是否为空。
4. **map**: `map`是一个关联容器,它存储键值对。每个键值对中,键是唯一的,而对应的值可以重复。你可以通过键来快速查找、插入或删除对应的值。例如,`map<string, int>`可以用来创建一个字符串到整数的映射。
5. **vector**: `vector`是动态数组容器,支持随机访问。它可以容纳任何类型的对象,并且在需要时自动扩展。常用操作包括`push_back`在末尾添加元素,`insert`在指定位置插入元素,`erase`删除元素,以及`size`和`max_size`获取元素数量和最大容量。
6. **list**: `list`是双向链表容器,支持快速在任意位置插入和删除元素。常用操作有`push_front`和`push_back`添加元素,`pop_front`和`pop_back`移除元素,以及`splice`和`remove`进行列表操作。
7. **deque**: 双端队列(Double-Ended Queue)可以像栈一样在两端进行推入和弹出操作。`deque`适合需要高效地在两端插入和删除元素的情况,同时也支持随机访问。
在上述代码中,我们看到这些容器的使用方法,例如`push_back`、`size`、`max_size`、`swap`等。`swap`函数用于交换两个容器的内容,`clear`用于清空容器,`begin`和`end`返回容器的迭代器,用于遍历元素。`rbegin`和`rend`分别返回逆序遍历的起始和结束迭代器,`erase`则用于删除指定范围内的元素。
此外,C++ STL还包含其他容器,如`set`(无序唯一键的关联容器)和`multiset`(无序可重复键的关联容器),以及算法(如排序、查找)和迭代器等。了解和熟练使用这些容器能够极大地提升C++编程的效率和代码质量。