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
相关推荐
橘子真甜~7 小时前
C/C++ Linux网络编程15 - 网络层IP协议
linux·网络·c++·网络协议·tcp/ip·计算机网络·网络层
asiwxy9 小时前
OpenGL 材质
c++
阿华hhh9 小时前
Linux系统编程(标准io)
linux·开发语言·c++
程序喵大人10 小时前
推荐个 C++ 练习平台
开发语言·c++·工具推荐
fpcc11 小时前
跟我学C++中级篇——std::is_invocable的分析应
c++
Code Slacker12 小时前
LeetCode Hot100 —— 滑动窗口(面试纯背版)(四)
数据结构·c++·算法·leetcode
SHERlocked9314 小时前
摄像头 RTSP 流视频多路实时监控解决方案实践
c++·后端·音视频开发
tang&14 小时前
哈希碰撞攻防战:C++闭散列与开散列实现全解析
c++·哈希算法
眠りたいです15 小时前
现代C++:C++11并发支持库
开发语言·c++·多线程·c++11·c++并发支持库