C++ STL中stack、queue和priority_queue的使用

需积分: 0 6 下载量 74 浏览量 更新于2024-09-14 收藏 99KB PDF 举报
"C++中的stack和queue使用方法" 在C++编程中,stack(栈)和queue(队列)是两种常用的数据结构,它们在处理数据的存储和操作上具有特定的规则。STL(Standard Template Library,标准模板库)为开发者提供了便捷的方式来实现和使用这些数据结构。 1. stack(栈) 栈是一种后进先出(Last In, First Out, LIFO)的数据结构。在C++中,`stack`模板类位于`<stack>`头文件中。创建`stack`对象时,可以指定元素类型和底层容器类型,但元素类型是必需的,如果不指定容器类型,默认使用`deque`。例如: ```cpp stack<int> s1; // 存储整数的栈 stack<string> s2; // 存储字符串的栈 ``` 栈的主要操作包括: - 入栈:`push(x)`,将元素x压入栈顶。 - 出栈:`pop()`,删除栈顶元素,不返回其值。 - 访问栈顶:`top()`,查看但不删除栈顶元素。 - 判断栈空:`empty()`,返回true表示栈为空。 - 获取元素个数:`size()`,返回栈中元素的数量。 2. queue(队列) 队列是一种先进先出(First In, First Out, FIFO)的数据结构。`queue`模板类同样在`<queue>`头文件中定义,其使用方式与`stack`类似,但默认底层容器类型是`deque`。例如: ```cpp queue<int> q1; // 存储整数的队列 queue<double> q2; // 存储双精度浮点数的队列 ``` 队列的操作包括: - 入队:`push(x)`,将元素x添加到队列末尾。 - 出队:`pop()`,删除队列的第一个元素,不返回其值。 - 访问队首:`front()`,查看但不删除队首元素。 - 访问队尾:`back()`,查看但不删除队尾元素。 - 判断队列空:`empty()`,返回true表示队列为空。 - 获取元素个数:`size()`,返回队列中元素的数量。 3. priority_queue(优先队列) 优先队列是一种特殊的队列,它的出队顺序取决于元素的优先级,而不是入队顺序。`priority_queue`也在`<queue>`头文件中定义,它默认按照元素的大值优先出队,但可以通过自定义比较函数改变这一行为。例如: ```cpp priority_queue<int> pq1; // 默认最大值优先 priority_queue<int, vector<int>, less<int>> pq2; // 明确指定使用vector作为容器,且保持默认的小值优先 ``` 优先队列的操作与普通队列相同,但出队顺序由优先级决定。 在实际编程中,`stack`、`queue`和`priority_queue`广泛应用于各种算法和问题解决中,如回溯算法、广度优先搜索(BFS)和深度优先搜索(DFS)等。理解并熟练掌握这些数据结构及其操作,能够提高代码的效率和可读性。