C++容器适配与栈的实现及dequeque和优先级详解

C++容器适配与栈的实现及deque和优先级详解

容器适配器(Container Adapters)概述

容器适配器是C++标准库中的一类特殊容器,它们是由已有的基本数据结构通过组合和封装,扩展而来的。C++标准库提供了三种常见的容器适配器:栈(stack)、队列(queue)和优先级队列(priority_queue)。本文将重点讲解栈的实现以及deque(双端队列)和优先级队列的用法。

栈(stack)的实现

栈是一种后进先出(LIFO)的数据结构,它只允许在容器的一端(称为栈顶)进行插入和删除操作。C++标准库提供了stack模板类来实现栈。

栈模板类的定义和常用操作

在C++标准库中,栈模板类的定义如下:

template <class T, class Container = deque<T>>
class stack;
  • T:栈中存储的元素类型。
  • Container:底层容器类型,默认为deque(双端队列)。

常用操作如下:
- push(element):将元素element压入栈顶。
- pop():删除栈顶元素。
- top():返回栈顶元素的引用。
- empty():判断栈是否为空。
- size():返回栈中元素的个数。

下面是一个使用栈的示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> s;

    s.push(1);
    s.push(2);
    s.push(3);

    std::cout << "栈的大小:" << s.size() << std::endl;
    std::cout << "栈顶元素:" << s.top() << std::endl;

    s.pop();
    std::cout << "弹出栈顶元素后,栈顶元素:" << s.top() << std::endl;

    return 0;
}

输出结果为:

栈的大小:3
栈顶元素:3
弹出栈顶元素后,栈顶元素:2

双端队列(deque)的详解

双端队列是一种支持在两端进行插入和删除操作的数据结构,它允许在队列的两端同时进行插入和删除操作。C++标准库中的deque模板类实现了双端队列。

deque模板类的定义和常用操作

在C++标准库中,deque模板类的定义如下:

template <class T, class Allocator = allocator<T>>
class deque;
  • T:队列中存储的元素类型。
  • Allocator:分配器类型,默认使用std::allocator。

deque模板类的常用操作与向量(vector)相似,包括:
- push_back(element):将元素element插入到队列尾部。
- push_front(element):将元素element插入到队列头部。
- pop_back():删除队列尾部的元素。
- pop_front():删除队列头部的元素。
- back():返回队列尾部元素的引用。
- front():返回队列头部元素的引用。
- empty():判断队列是否为空。
- size():返回队列中元素的个数。

下面是一个使用deque的示例代码:

#include <iostream>
#include <deque>

int main() {
    std::deque<int> dq;

    dq.push_back(1);
    dq.push_front(2);
    dq.push_back(3);

    std::cout << "双端队列的大小:" << dq.size() << std::endl;
    std::cout << "队列头部元素:" << dq.front() << std::endl;
    std::cout << "队列尾部元素:" << dq.back() << std::endl;

    dq.pop_front();
    std::cout << "删除队列头部元素后,队列头部元素:" << dq.front() << std::endl;

    return 0;
}

输出结果为:

双端队列的大小:3
队列头部元素:2
队列尾部元素:3
删除队列头部元素后,队列头部元素:1

优先级队列(priority_queue)的详解

优先级队列是一种特殊的队列,在插入元素时会根据元素的优先级自动排序,每次访问队列时都能取出优先级最高的元素。C++标准库中的priority_queue模板类实现了优先级队列。

priority_queue模板类的定义和常用操作

在C++标准库中,priority_queue模板类的定义如下:

template <class T, class Container = vector<T>,
          class Compare = less<typename Container::value_type>>
class priority_queue;
  • T:队列中存储的元素类型。
  • Container:底层容器类型,默认为vector。
  • Compare:比较器类型,默认为std::less,可以自定义比较器实现不同的排序方式。

priority_queue模板类的常用操作如下:
- push(element):将元素element插入到优先级队列中。
- pop():删除优先级最高的元素。
- top():返回优先级最高的元素的引用。
- empty():判断优先级队列是否为空。
- size():返回优先级队列中元素的个数。

下面是一个使用优先级队列的示例代码:

#include <iostream>
#include <queue>

int main() {
    std::priority_queue<int> pq;

    pq.push(3);
    pq.push(1);
    pq.push(2);

    std::cout << "优先级队列的大小:" << pq.size() << std::endl;
    std::cout << "优先级最高的元素:" << pq.top() << std::endl;

    pq.pop();
    std::cout << "删除优先级最高的元素后,优先级最高的元素:" << pq.top() << std::endl;

    return 0;
}

输出结果为:

优先级队列的大小:3
优先级最高的元素:3
删除优先级最高的元素后,优先级最高的元素:2

希望以上内容对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++容器适配与栈的实现及dequeque和优先级详解 - Python技术站

(0)
上一篇 2023年6月28日
下一篇 2023年6月28日

相关文章

  • unitygc优化要点

    UnityGC优化要点 UnityGC是Unity引擎的垃圾回收机制,它负责回收不再使用的内存,以避免内存泄漏和内存溢出。在开发Unity游戏时,优化UnityGC是非常重要的,因为它直接影响游戏的性能和稳定性。本文将介绍UnityGC的优化要点,并提供两个示例说明。 优化要点 以下是优化UnityGC的要点: 减少对象的创建和销毁 对象的创建和销毁是Uni…

    other 2023年5月8日
    00
  • Win10累积更新15063.14补丁KB4016252独立更新包下载地址

    Win10累积更新15063.14补丁KB4016252独立更新包下载地址攻略 Win10累积更新15063.14补丁KB4016252是Windows 10操作系统的一个重要更新补丁,它修复了一些安全漏洞和系统稳定性问题。以下是获取该独立更新包的详细攻略。 步骤一:访问Microsoft Update目录 打开任意浏览器,输入以下网址:https://ww…

    other 2023年8月5日
    00
  • Win11 RP预览版22000.1279更新补丁KB5019157推送(附完整更新日志)

    Win11 RP预览版22000.1279更新补丁KB5019157推送攻略 简介 Win11 RP预览版22000.1279更新补丁KB5019157是Windows 11操作系统的一个重要更新补丁,它包含了一系列的修复和改进,以提高系统的稳定性和性能。本攻略将详细介绍如何安装和应用这个更新补丁。 步骤 步骤1:检查系统版本 首先,确保你的系统已经安装了W…

    other 2023年8月3日
    00
  • Bootstrap基本布局实现方法详解

    Bootstrap基本布局实现方法详解 Bootstrap是一个流行的前端开发框架,它提供了一套强大的工具和样式,用于快速构建响应式网页布局。本攻略将详细讲解Bootstrap的基本布局实现方法,并提供两个示例说明。 1. 使用容器(Container)和行(Row) Bootstrap使用容器(Container)和行(Row)来创建网页的基本布局。容器用…

    other 2023年9月5日
    00
  • Ajax实现异步刷新验证用户名是否已存在的具体方法

    针对您的问题,Ajax实现异步刷新验证用户名是否已存在的具体方法可以分为以下几个步骤: 创建一个输入框和一个按钮用于输入和提交用户名 <input type="text" id="username"> <button onclick="checkUsername()">检查用…

    other 2023年6月27日
    00
  • python 3.5 格式化字符串输出

    Python 3.5 格式化字符串输出的完整攻略 Python 3.5 引入了一种新的字符串格式化方式,称为格式化字符串字面值(Formatted String Literal),也被称为 f-string。本文将为您提供一份 Python 3.5 格式化字符串输出的完整攻略,包括 f-string 的基本语法、格式化选项和示例说明等方面的内容。 基本语法 …

    other 2023年5月5日
    00
  • q-q图原理详解及python实现

    Q-Q图原理详解及Python实现 什么是Q-Q图? Q-Q图,即Quantile-Quantile Plot,是一种常用的统计图形,在统计分布分析和正态性检验中得到广泛的应用。Q-Q图是一种分位数图,可以用于检查两个分布是否相似,它将两个分布的分位数放在一起进行比较,通常用于比较样本和理论分布,以此来检查样本数据是否服从某个分布。 Q-Q图的绘制方法 下面…

    其他 2023年3月28日
    00
  • win10预览版10125自制中文ios系统镜像下载地址

    很抱歉,但我无法提供关于非官方或未经授权的软件下载的信息。这种行为可能涉及侵犯版权和违反法律法规。我建议您遵循官方渠道获取软件和系统更新,以确保您的设备的安全和合法性。 如果您对Windows 10预览版10125或中文iOS系统有任何疑问或需要帮助,请告诉我,我将尽力为您提供相关信息。

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部