STL详解 —— stack和queue的介绍及使用
- stack
- stack的定义方式
- stack的使用
 
- queue
- queue的定义方式
- queue的使用
 
stack
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其只能从容器的一端进行元素的插入与提取操作。
 
stack的定义方式
首先先介绍一下容器适配器。
容器适配器是一种设计模式,用于在现有容器的基础上提供新的接口或修改现有接口,以满足特定的需求或者提供特定的功能。在C++中,容器适配器通常是通过组合一个已有的容器来实现的。
在C++标准库中,容器适配器是通过模板类来实现的,它们提供了特定的接口,使得用户可以方便地使用已有的容器来实现不同的数据结构或算法。
常见的容器适配器包括:
stack(栈):提供了后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
 queue(队列):提供了先进先出(FIFO)的数据结构,只允许在队列的一端进行插入操作,另一端进行删除操作。
 priority_queue(优先队列):提供了一种特殊的队列,其中的元素按照一定的优先级顺序进行排序。
容器适配器通常不直接提供对底层容器的访问,而是通过一组特定的操作接口来实现特定的功能。这些操作接口包括压入元素、弹出元素、访问栈顶元素等。
方式一: 使用默认的适配器定义栈。
stack<int> st1;方式二: 使用特定的适配器定义栈。
stack<int, vector<int>> st2;
stack<int, list<int>> st3;stack的使用
stack当中常用的成员函数如下:
| 成员函数 | 功能 | 
|---|---|
| empty() | 判断栈是否为空 | 
| size() | 获取栈中有效元素个数 | 
| top() | 获取栈顶元素 | 
| push() | 元素入栈 | 
| pop() | 元素出栈 | 
| swap() | 交换两个栈中的数据 | 
#include <iostream>
#include <vector>
#include <stack>
using namespace std;int main()
{stack<int, vector<int>> s1;s1.push(1);s1.push(2);s1.push(3);s1.push(4);cout << s1.size() << endl; 		//4while (!s1.empty()){cout << s1.top() << " ";s1.pop();}cout << endl; 					//4 3 2 1return 0;
}queue
队列是一种容器适配器,专门用在具有先进先出操作的上下文环境中,其只能从容器的一端插入元素,另一端提取元素。
 
queue的定义方式
方式一: 使用默认的适配器定义队列。
queue<int> q1;方式二: 使用特定的适配器定义队列。
queue<int, vector<int>> q2;
queue<int, list<int>> q3;queue的使用
queue当中常用的成员函数如下:
| 成员函数 | 功能 | 
|---|---|
| empty() | 判断队列是否为空 | 
| size() | 获取队列中有效元素个数 | 
| front() | 获取队头元素 | 
| back() | 获取队尾元素 | 
| push() | 队尾入队列 | 
| pop() | 队头出队列 | 
| swap() | 交换两个队列中的数据 | 
#include <iostream>
#include <list>
#include <queue>
using namespace std;int main()
{queue<int, list<int>> q;q.push(1);q.push(2);q.push(3);q.push(4);cout << q.size() << endl; 	//4while (!q.empty()){cout << q.front() << " ";q.pop();}cout << endl; 	//1 2 3 4return 0;
}