C++ Stack&Queue

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值