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

yizhihongxing

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日

相关文章

  • 魔兽世界7.3.5火法怎么堆属性 wow7.35火法配装属性优先级攻略

    魔兽世界7.3.5火法怎么堆属性 wow7.35火法配装属性优先级攻略 作为火法职业的玩家,我们需要正确地堆积各种属性,以增强职业性能、提高输出。以下是火法职业配装属性优先级的攻略: 一、智力(Intelligence) 智力是火法职业最主要的属性,它提高了你的法术强度和法术暴击率。智力需要成为火法职业配装中的主属性,技能点的分配中智力是最主要的属性之一,装…

    other 2023年6月27日
    00
  • java中@Configuration使用场景

    Java中@Configuration使用场景 @Configuration是Spring框架中的注解,用于标识一个类是配置类。它的使用场景如下: 1. 配置Bean @Configuration注解可以与@Bean注解一起使用,用于配置和定义Spring容器中的Bean。通过@Configuration注解的配置类,我们可以使用@Bean注解来创建和配置B…

    other 2023年10月12日
    00
  • PHP如何通过带尾指针的链表实现’队列’

    这里是PHP如何通过带尾指针的链表实现队列的完整攻略。 什么是队列 队列(queue)是一种在计算机科学中常见的数据结构,它通常指满足先进先出(FIFO)的线性表。队列只允许在表的前端进行删除操作,在表的后端进行插入操作。 队列的实现原理 队列可以通过数组或链表来实现。在数组实现中,我们使用指针来指向队列的头和尾。在链表中,我们使用带尾指针的链表来实现队列。…

    other 2023年6月27日
    00
  • C++读写INI配置文件的类实例

    下面是“C++读写INI配置文件的类实例”的完整攻略: 一、背景介绍 INI配置文件是一种常见的文本配置文件格式,它使用Section和Key-Value键值对来存储配置信息,广泛应用于各种软件中。在C++开发中,我们可以通过读写INI配置文件的方式来实现软件的配置管理,方便快捷。 二、INI配置文件的基本格式 INI配置文件的基本格式是由Section和K…

    other 2023年6月25日
    00
  • Windows11如何更改系统配置? Win11修改系统环境变量配置的技巧

    下面将详细讲解“Windows11如何更改系统配置? Win11修改系统环境变量配置的技巧”的攻略。 一、修改系统配置 1.打开系统配置工具 首先,在Windows11系统中,我们可以通过打开“运行”窗口来打开系统配置工具。具体操作如下: 1.按下“Win”+“R”组合键,打开“运行”窗口。 2.在“运行”窗口中输入“msconfig”命令,然后点击“确定”…

    other 2023年6月27日
    00
  • 淘宝直播严选精选佣金结算优先级规则

    淘宝直播严选精选佣金结算优先级规则攻略 1. 背景介绍 在淘宝直播中,严选精选是一种特殊类型的佣金结算方式。严选精选的商品通常由淘宝直播的作者进行推荐,并且具有更高的佣金比例。然而,在进行严选精选佣金结算时,存在一些优先级规则,本攻略将详细讲解这些规则。 2. 严选精选佣金结算优先级规则 2.1. 直播间内商品推荐顺序优先级 在同一个直播间内,存在多个严选精…

    other 2023年6月28日
    00
  • SpringBoot数据层测试事务回滚的实现流程

    以下是Spring Boot数据层测试事务回滚的实现流程的完整攻略,包含两个示例说明: 1. 使用注解@Transactional进行事务管理 在测试类中,使用@Transactional注解标记测试方法,这样测试方法中的数据库操作将在事务中执行,并在测试完成后自动回滚。 示例代码如下: @RunWith(SpringRunner.class) @Sprin…

    other 2023年10月17日
    00
  • 魔兽世界6.2武器战输出手法及属性饰品选择 wow6.2武器战攻略

    魔兽世界6.2武器战输出手法及属性饰品选择攻略 1. 前言 该攻略介绍魔兽世界6.2版本中的武器战输出手法、属性饰品选择等内容。针对玩家在实际游戏中的输出和饰品选择提供一些建议。 2. 武器战输出手法 2.1 固定技能输出 2.1.1 大地震击 大地震击是武器战输出的核心技能,每秒钟产生大量伤害,能够成为武器战击杀BOSS的主要手段。大地震击的使用需要龙息手…

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