【C++】容器适配器

本文探讨了三种常见数据结构容器适配器:栈(基于deque)、队列(deque或vector)和优先级队列(基于堆,如vector)。讲解了它们的基本操作接口和底层容器对内存分布的影响,重点在于栈的连续性和队列的前后端操作特性。
摘要由CSDN通过智能技术生成

容器适配器

一、栈:stack

  • 一种运算受限的线性表,仅在表尾进行插入和删除操作的线性表
  • 默认底层容器是deque,array/forwar_list[×]
  • 常用接口:
    stack() 构造空的栈
    empty() 检测stack是否为空
    size() 返回stack中元素的个数
    top() 返回栈顶元素的引用
    push() 将元素val压入stack中
    pop() 将栈顶元素弹出

二、队列:queue

  • 一种操作受限制的线性表,只允许在表的前端(front)进行删除操作,而在表的后端(back)进行插入操作
  • 默认底层容器是deque,vector[×]
  • 常用接口:
    queue() 构造空的队列
    empty() 检测队列是否为空,是返回true,否则返回false
    size() 返回队列中有效元素的个数
    front() 返回队头元素的引用
    back() 返回队尾元素的引用
    push() 在队尾将元素val入队列
    pop() 将队头元素出队列

三、优先队列: priority_queue

  • 优先级队列的底层是堆(默认建的是大堆),每次插入删除数据都会进行调整

  • 默认用的是vector,list[×]

  • 常用接口:
    constructor(构造函数) 用法
    priority_queue() 空的优先级队列
    priority_queue(Iterator first, Iterator last) 迭代器区间进行构造
    empty() 判断优先级队列是否为空
    size() 计算队列中元素个数
    top() 取队列中优先级最高的元素(队头元素)
    push() 从队尾插入元素
    pop() 删除优先级最高的元素(队头的元素)

  • 定义:priority_queue<Type, Container, Functional>
    Type:数据类型
    Container :容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector
    Functional:比较的方式
    当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆

思考:栈内元素在内存中是连续分布的吗?

  • 栈是容器适配器,底层容器使用不同的容器,决定了栈内数据在内存中是不是连续分布的;
  • 在默认情况下,默认底层容器是deque,deque在内存中的数据分布是不连续的;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值