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
相关推荐
_dindong6 小时前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表
liu****7 小时前
12.线程(二)
linux·开发语言·c++·1024程序员节
小冯的编程学习之路7 小时前
【C++】:C++基于微服务的即时通讯系统(2)
开发语言·c++·微服务
许长安7 小时前
C/C++中的extern关键字详解
c语言·开发语言·c++·经验分享·笔记
earthzhang20218 小时前
【1039】判断数正负
开发语言·数据结构·c++·算法·青少年编程
蕓晨8 小时前
auto 自动类型推导以及注意事项
开发语言·c++·算法
mjhcsp9 小时前
C++ 递推与递归:两种算法思想的深度解析与实战
开发语言·c++·算法
_OP_CHEN9 小时前
算法基础篇:(三)基础算法之枚举:暴力美学的艺术,从穷举到高效优化
c++·算法·枚举·算法竞赛·acm竞赛·二进制枚举·普通枚举
m0_748248029 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
java·开发语言·c++·算法
卡提西亚9 小时前
一本通网站1122题:计算鞍点
c++·笔记·编程题·一本通