Java 转 C++ 系列:STL容器之stack与queue
·
文章参考:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难
一、stack容器
1.1 stack 基本概念
stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。
栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为
- 栈中进入数据称为 — 入栈
push - 栈中弹出数据称为 — 出栈
pop

另外,使用 vector 要求添加头文件 #include<stack>。
1.2 stack 常用接口
// 构造函数
stack<T> stk; , stack采用模板类实现, stack对象的默认构造形式
stack(const stack &stk); , 拷贝构造函数
// 赋值操作
stack& operator=(const stack &stk); , 重载等号操作符
// 数据存取
push(elem); , 向栈顶添加元素
pop(); , 从栈顶移除第一个元素
top(); , 返回栈顶元素
// 大小操作
empty(); , 判断堆栈是否为空
size(); , 返回栈的大小
示例代码:
#include<string>
#include<iostream>
#include<stack>
using namespace std;
int main() {
system("chcp 65001> nul");
// 1. 默认构造
stack<int> stk;
// 2. 数据存取:push添加栈顶元素
stk.push(10);
stk.push(20);
stk.push(30); // 栈内:30(栈顶)→ 20 → 10(栈底)
// 3. 大小操作:empty()/size()
cout << "栈是否为空:" << boolalpha << stk.empty() << endl; // 输出:false
cout << "栈的大小:" << stk.size() << endl; // 输出:3
// 4. 数据存取:top()获取栈顶元素
cout << "栈顶元素:" << stk.top() << endl; // 输出:30
stk.top() = 300; // 修改栈顶元素 → 栈内:300 → 20 → 10
// 5. 数据存取:pop()删除栈顶元素(无返回值)
stk.pop(); // 删除300 → 栈内:20 → 10
cout << "pop后栈顶元素:" << stk.top() << endl; // 输出:20
// 6. 拷贝构造 & 赋值操作
stack<int> stk2(stk); // 拷贝构造 → stk2: 20 → 10
stack<int> stk3;
stk3 = stk2; // 重载等号 → stk3: 20 → 10
// 循环清空栈(先判断非空)
while (!stk.empty()) {
cout << "删除栈顶:" << stk.top() << endl; // 依次输出20、10
stk.pop();
}
cout << "清空后栈大小:" << stk.size() << endl; // 输出:0
return 0;
}
注:boolalpha 是 C++ 标准库中的输出格式控制符,作用是让 cout 输出布尔值(bool 类型)时,显示文本形式(true/false)而非默认的数字形式(1/0)
二、queue容器
2.1 queue 基本概念
Queue是一种 先进先出 (First In First Out,FIFO)的数据结构,它有两个出口。
队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。
- 队列中进数据称为 — 入队
push - 队列中出数据称为 — 出队
pop

另外,使用 vector 要求添加头文件 #include<queue>。
2.2 queue 常用接口
// 构造函数
queue<T> que; , queue采用模板类实现,queue对象的默认构造形式
queue(const queue &que); , 拷贝构造函数
// 赋值操作
queue& operator=(const queue &que); , 重载等号操作符
// 数据存取
push(elem); , 往队尾添加元素
pop(); , 从队头移除第一个元素
back(); , 返回最后一个元素
front(); , 返回第一个元素
// 大小操作
empty(); , 判断队列是否为空
size(); , 返回队列的大小
示例代码:
#include <queue>
#include <iostream>
using namespace std;
int main() {
system("chcp 65001> nul");
// 1. 默认构造
queue<int> que;
// 2. 数据存取:push往队尾添加元素
que.push(10);
que.push(20);
que.push(30); // 队列:10(队头)→ 20 → 30(队尾)
// 3. 大小操作:empty()/size()
cout << boolalpha; // 布尔值显示true/false
cout << "队列是否为空:" << que.empty() << endl; // 输出:false
cout << "队列大小:" << que.size() << endl; // 输出:3
// 4. 数据存取:front()队头 / back()队尾
cout << "队头元素:" << que.front() << endl; // 输出:10
cout << "队尾元素:" << que.back() << endl; // 输出:30
que.back() = 300; // 修改队尾元素 → 队列:10→20→300
// 5. 数据存取:pop()删除队头(无返回值)
que.pop(); // 删除10 → 队列:20→300
cout << "pop后队头:" << que.front() << endl; // 输出:20
// 6. 拷贝构造 & 赋值操作
queue<int> que2(que); // 拷贝构造 → que2:20→300
queue<int> que3;
que3 = que2; // 重载等号 → que3:20→300
// 循环清空队列(先判断非空)
while (!que.empty()) {
cout << "删除队头:" << que.front() << endl; // 依次输出20、300
que.pop();
}
cout << "清空后队列大小:" << que.size() << endl; // 输出:0
return 0;
}
更多推荐


所有评论(0)