C++ Stack&Queue

1.6 std::stack

在C++中, std::stack 是一个容器适配器,它基于其他容器实现了栈的功能,栈是一种先进后出(first int last out, FILO)的数据结构,要使用 std::stack 我们得先包含头文件:

cpp 复制代码
#include <stack>

1.6.1 stack的初始化

std::stack 的使用过程中一般使用默认初始化,即不给 std::stack 赋值, std::stack 不支持使用花括号初始化器 {} 来进行初始化,但是 std::stack 可以使用其他容器来进行初始化,比如 std::deque ,这种初始化方式会调用适当的构建函数来构建栈对象。
举例:

cpp 复制代码
#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;
}
cpp 复制代码
#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;
}

运行结果:

cpp 复制代码
5 4 3 2 1

1.6.2 stack的常用函数

  • push(),向栈顶添加元素
  • pop(),弹出栈顶元素,请注意无返回值
  • top(),访问栈顶元素
  • empty(),判断栈是否为空
  • size(),获取栈中元素的数量
    示例:
cpp 复制代码
#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;
}

运行结果:

cpp 复制代码
栈顶元素为: 10
弹出元素
栈中元素个数为: 8
栈是否为空: 0

1.7 std::queue

在C++标准库中, std::queue 是一个容器适配器,它提供了队列的功能 queue ,队列是一种先进先出(first in first out)的数据结构, std::queue 通过封装 std:deque 来实现队列操作,使用 std::queue 需要包含头文件

cpp 复制代码
#include <queue>

1.7.1 queue的初始化

std::queue 可以使用默认初始化

cpp 复制代码
std::queue<int> myQueue;

std::queue 也可以使用花括号初始化器 {} 来进行初始化

cpp 复制代码
std::queue<int> myQueue = {1, 2, 3, 4, 5};

1.7.2 queue的常用函数

  • push(),在队尾添加元素
  • front(),访问队首元素
  • back(),访问队尾元素
  • pop(),移除队首元素,无返回值
  • empty(),检查是否为空
  • size(),返回队列中元素数量
    举例:
cpp 复制代码
#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;
}

运行结果:

cpp 复制代码
当前队首元素为: 1
当前队列中的元素数量为: 2
当前队列是否为空: 0
相关推荐
GUIQU.2 小时前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt
西阳未落5 小时前
C++基础(21)——内存管理
开发语言·c++·面试
超级大福宝6 小时前
使用 LLVM 16.0.4 编译 MiBench 中的 patricia遇到的 rpc 库问题
c语言·c++
wangjialelele6 小时前
Linux中的线程
java·linux·jvm·c++
hsjkdhs7 小时前
万字详解C++之构造函数析构函数
开发语言·c++
SELSL8 小时前
SQLite3的API调用实战例子
linux·数据库·c++·sqlite3·sqlite实战
什么半岛铁盒8 小时前
C++项目:仿muduo库高并发服务器-------Channel模块实现
linux·服务器·数据库·c++·mysql·ubuntu
闭着眼睛学算法8 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
ShineSpark9 小时前
C++面试11——指针与引用
c++·面试
杨小码不BUG9 小时前
CSP-J/S初赛知识点精讲-图论
c++·算法·图论··编码·csp-j/s初赛