C++容器适配器stack和queue使用详解

1.stack容器

在C++中,std::stack是一个容器适配器,它提供了后进先出(LIFO, Last-In-First-Out)的数据结构特性。stack并不是一个独立的容器,而是基于现有的标准容器(如std::vectorstd::dequestd::list)实现的。默认情况下,如果未指定基础容器类型,std::deque会被用作默认的底层容器。

std::stack主要接口包括:

  • 构造函数

    • stack(); 默认构造函数,使用默认的容器(通常是deque)来创建栈。
    • explicit stack(const container& c); 使用给定的容器c来初始化栈。
  • 成员函数

    • bool empty() const; 检查栈是否为空。
    • size_type size() const; 返回栈中元素的数量。
    • reference top(); 返回栈顶元素的引用,但不移除它。
    • void push(const value_type& x); 在栈顶添加一个元素。
    • void pop(); 移除栈顶元素。

注意,stack不直接提供访问除了栈顶之外的任何元素的方法,这是由其后进先出的特性决定的。

下面是一个简单的使用示例:

//
// Created by 86189 on 2024/6/28.
//
#include <iostream>
#include <stack>
using namespace std;

int main(){
    stack<int>stk;
    stack<int>stk2(stk);
    stk.push(10);
    stk.push(20);
    stk.push(30);
    stk.push(10);
    stk2 = stk;
    cout << stk.size() << endl;
    while (!stk.empty()){
      cout << stk.top() << " ";
      stk.pop();
    }
    cout << endl;
    cout << stk.size() << endl;
    cout << stk2.size() << endl;
    return 0;
}

在这个例子中,我们创建了一个整数栈,向其中压入了几个元素,然后查看和操作栈顶元素,展示了基本的栈操作。

2.queue容器

在C++中,std::queue是一个容器适配器,它提供了先进先出(FIFO, First-In-First-Out)的数据结构特性。与std::stack类似,queue也不是一个独立的容器,而是基于现有的标准容器实现的,最常用的底层容器是std::deque,但也可以是其他容器如std::list。默认情况下,如果没有特别指定,deque就是默认的底层容器。

std::queue的主要接口包括:

  • 构造函数

    • queue(); 默认构造函数,使用默认的容器(通常是deque)来创建队列。
    • explicit queue(const container& c); 使用给定的容器c来初始化队列。
  • 成员函数

    • bool empty() const; 检查队列是否为空。
    • size_type size() const; 返回队列中元素的数量。
    • reference front(); 返回队列头部元素的引用,但不移除它。
    • reference back(); 返回队列尾部元素的引用,但不移除它。
    • void push(const value_type& x); 在队列尾部添加一个元素。
    • void pop(); 移除队列头部元素。

下面是一个简单的使用示例:

//
// Created by 86189 on 2024/6/28.
//
#include <iostream>
#include <queue>
using namespace std;


int main(){
    // 创建一个整数类型的队列
    queue<int>q;
    
    // 向队列中添加三个元素
    q.push(10);
    q.push(50);
    q.push(20);
    
    // 输出队列末尾的元素
    cout << q.back() << endl;
    
    // 输出队列头部的元素
    cout << q.front() << endl;
    
    // 当队列不为空时,循环输出队列的头部元素并将其移除
    while (!q.empty()){
        cout << q.front() << endl;
        q.pop();
    }
    
    // 输出队列当前的大小
    cout << q.size() << endl;
    
    return 0;
}

在这个示例中,我们创建了一个整数队列,向其中添加了几个元素,然后查看和操作队列的头部和尾部元素,展示了基本的队列操作。队列保证了最先添加的元素将会最先被移除,体现了先进先出的原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FightingLod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值