1.6 std::stack
在C++中,
std::stack
是一个容器适配器,它基于其他容器实现了栈的功能,栈是一种先进后出(first int last out, FILO)的数据结构,要使用
std::stack
我们得先包含头文件:
#include <stack>
1.6.1 stack的初始化
std::stack
的使用过程中一般使用默认初始化,即不给
std::stack
赋值,
std::stack
不支持使用花括号初始化器
{}
来进行初始化,但是
std::stack
可以使用其他容器来进行初始化,比如
std::deque
,这种初始化方式会调用适当的构建函数来构建栈对象。
举例:
#include <iostream>
#include <stack>
#include <deque>
int main() {
std::deque<int> myDeque = { 1, 2, 3, 4, 5 };
std::stack<int> myStack(myDeque); // 使用std::deque来构建
while (!myStack.empty()) {
std::cout << myStack.top() << " ";
myStack.pop();
}
return 0;
}
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack({ 1, 2, 3, 4, 5 }); // 使用std::deque作为底层容器
while (!myStack.empty()) {
std::cout << myStack.top() << " ";
myStack.pop();
}
return 0;
}
运行结果:
5 4 3 2 1
1.6.2 stack的常用函数
- push(),向栈顶添加元素
- pop(),弹出栈顶元素,请注意无返回值
- top(),访问栈顶元素
- empty(),判断栈是否为空
- size(),获取栈中元素的数量
示例:
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
for (int i = 0; i < 10; i++) {
myStack.push(i + 1); // 向栈中添加元素
}
std::cout << "栈顶元素为: " << myStack.top() << std::endl; // 查看栈顶元素
std::cout << "弹出元素" << std::endl; // 栈顶元素出栈
myStack.pop();
myStack.pop();
std::cout << "栈中元素个数为: " << myStack.size() << std::endl; // 查看元素个数
std::cout << "栈是否为空: " << myStack.empty() << std::endl; // 查看栈是否为空
return 0;
}
运行结果:
栈顶元素为: 10
弹出元素
栈中元素个数为: 8
栈是否为空: 0
1.7 std::queue
在C++标准库中,
std::queue
是一个容器适配器,它提供了队列的功能
queue
,队列是一种先进先出(first in first out)的数据结构,
std::queue
通过封装
std:deque
来实现队列操作,使用
std::queue
需要包含头文件
#include <queue>
1.7.1 queue的初始化
std::queue
可以使用默认初始化
std::queue<int> myQueue;
std::queue
也可以使用花括号初始化器
{}
来进行初始化
std::queue<int> myQueue = {1, 2, 3, 4, 5};
1.7.2 queue的常用函数
- push(),在队尾添加元素
- front(),访问队首元素
- back(),访问队尾元素
- pop(),移除队首元素,无返回值
- empty(),检查是否为空
- size(),返回队列中元素数量
举例:
#include <iostream>
#include <queue>
int main() {
std::queue<int> myQueue; // 默认初始化
myQueue.push(1); // 添加元素
myQueue.push(2);
myQueue.push(3);
std::cout << "当前队首元素为: " << myQueue.front() << std::endl; // 查看队首元素
myQueue.pop(); // 移除队首元素
std::cout << "当前队列中的元素数量为: " << myQueue.size() << std::endl; // 查看队列中元素个数
std::cout << "当前队列是否为空: " << myQueue.empty() << std::endl; // 查看当前队列是否为空
return 0;
}
运行结果:
当前队首元素为: 1
当前队列中的元素数量为: 2
当前队列是否为空: 0