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; //4
while (!s1.empty())
{
cout << s1.top() << " ";
s1.pop();
}
cout << endl; //4 3 2 1
return 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; //4
while (!q.empty())
{
cout << q.front() << " ";
q.pop();
}
cout << endl; //1 2 3 4
return 0;
}