目录
一. stack
1.1 stack的介绍
1.2 stack的定义
1.3 stack的使用
编辑
二. queue
2.1 queue的介绍
2.2 queue的定义
2.3 queue的使用
一. stack
1.1 stack的介绍
- stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。
- stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。
成员函数 | 功能 |
(constructor) | 构造空的栈 |
empty | 检测stack是否为空 |
size | 返回stack中元素的个数 |
top | 返回栈顶元素的引用 |
push | 将元素val压入stack中 |
pop | 将stack中尾部的元素弹出 |
1.2 stack的定义
头文件:#include <stack>
一. 使用默认的适配器定义栈
stack<T> stackName;
//这里,T 是你想在栈中存储的数据类型。例如,如果你想创建一个存储整数的栈,你可以这样定义:
stack<int> myStack;
二. 使用特定的适配器定义栈
std::stack
使用一个底层容器进行封装,默认情况下是 std::deque
,但是你也可以指定其他容器,如 std::vector
或 std::list
。如果你想使用特定的底层容器,你可以在定义栈时这样写:
#include <stack>
#include <vector>
#include <list>
std::stack<int, std::vector<int>> stackUsingVector;
//第一个int:这是栈中将要存储的数据的类型。在这个例子中,栈将存储 int 类型的数据。
//std::vector<int>:这是栈的底层容器类型和该容器存储的数据类型。
//std::vector<int> 指定了std::stack 使用一个 int 类型的 std::vector 作为其底层容器。
//这意味着 stack 将会利用td::vector 的功能来处理数据存储和相关操作。
std::stack<int, std::list<int>> stackUsingList;
注意:这样写是错误的
std::stack<int, std::vector<double>> stackUsingVector;
不行,
std::stack
的第二个模板参数,即底层容器,它的元素类型必须与栈存储的元素类型一致。在给出的例子std::stack<int, std::vector<double>> stackUsingVector;
中,栈被声明为存储int
类型的元素,而底层容器std::vector<double>
被声明为存储double
类型的元素,这是不匹配的。栈的元素类型和底层容器的元素类型必须相同。正确的声明应该是这样,如果你想要一个
int
类型的栈,那么底层容器也应该是int
类型的:
1.3 stack的使用
int main()
{
stack<int,vector<int>> s1;
s1.push(1);//push的用法
s1.push(2);
s1.push(3);
s1.push(4);
s1.push(5);
cout << s1.size() << endl;//size的用法
while (!s1.empty())//empty的用法
{
cout << s1.top() << " ";//top的用法
s1.pop();//pop的用法。栈顶最开始是5,pop将5弹出之后,栈顶为4,以此类推
}
return 0;
}
二. queue
2.1 queue的介绍
- 队列是一种容器适配器,专门用在具有先进先出操作的上下文环境中,其只能从容器的一端插入元素,另一端提取元素。
- 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。
成员函数 | 功能 |
(constructor) | 构造空的队列 |
empty | 检测队列是否为空,是返回true,否则返回false |
size | 返回队列中有效元素的个数 |
front | 返回队头元素的引用 |
back | 返回队尾元素的引用 |
push | 在队尾将元素val入队列 |
pop | 将队头元素出队列 |
2.2 queue的定义
一. 使用默认的适配器定义栈
queue<int> q1;
q1
是一个队列,其元素类型为 int
。在没有指定底层容器的情况下,std::queue
默认使用 std::deque
作为其底层容器。
二. 使用特定的适配器定义栈
queue<int, vector<int>> q2;
queue<int, list<int>> q3;
这里也要注意,第一个int和后面的int要保持一致
2.3 queue的使用
int main() {
queue<int> q;
// 向队列中插入元素
q.push(1);
q.push(2);
q.push(3);
//判断是否为空
cout << "IsEmpty: " << q.empty() << "\n";
// 显示队首和队尾元素
cout << "Front: " << q.front() << "\n";
cout << "Back: " << q.back() << "\n";
// 移除队首元素
q.pop();
// 再次显示队首元素
cout << "Front after pop: " << q.front() << "\n";
return 0;
}