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
相关推荐
影视飓风TIM19 分钟前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
C++ 老炮儿的技术栈36 分钟前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
xxwxx__1 小时前
深入理解 C++ STL:stack、queue 与 deque 从使用到底层实现全解析
开发语言·c++·算法
wuminyu1 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++
郝学胜-神的一滴1 小时前
C++11 工程级应用 08:Lambda表达式与Tuple元组
开发语言·jvm·c++·python·程序人生·开源
水饺编程3 小时前
第5章,[Win32 章节] :圆角矩形教学插图绘制程序
c语言·c++·windows·visual studio
Existence_Time3 小时前
CSP 考前复习
c++
zerwave3 小时前
从零实现简化 DDS 完整技术文档(含模块作用与详细注释)
linux·c++·机器人
Dream Cosmos3 小时前
C++ 多态下篇:虚函数表、动态绑定与多态底层原理
开发语言·c++
_Twink1e17 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen