C++适配器

news2024/11/26 10:20:38

文章目录

  • 引言
    • 栈和队列
  • priority_queue
    • 仿函数
    • 迭代器区间

引言

栈的特性是先进后出,队列的特性是先进先出,然而双向队列同时具有栈和队列的特性,所以我们可以通过双向队列来适配出栈和队列。
先看库里面

栈和队列

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
stack和queue模板参数里面都有一个class Container = deque,就是说库里面在实现它们时默认是通过deque适配出来的。
比如stack的push底层其实是通过调用deque的push_back()实现的,pop底层是通过调用deque的pop_back()实现的
在这里插入图片描述

对于queue的push底层是通过调用deque的push_front()实现的,pop是通过调用deque的1pop_front()实现的
在这里插入图片描述

priority_queue

优先队列底层就是堆,使用数组实现的,所以我们可以使用容器vector适配出优先队列
在这里插入图片描述

仿函数

此外还有一个参数
class Compare = less
这个参数其实就是一个仿函数,什么是仿函数呢?就是把一个类对象像函数一样使用。怎么实现呢?底层就是把这个类重载了一个()运算符。在传这个参数时,我们可以自己实现一个仿函数去传,也可以使用库里面的
在这里插入图片描述
在这里插入图片描述
这两个是库里面包含的两个仿函数,用于比较大小,去排序,值得注意的是这里的less指的是升序,而greater是指降序
在这里插入图片描述

在这里插入图片描述
因此优先队列默认不传第二个参数的情况下,输出结果是升序

//仿函数/函数对象
//重载了括号,让类可以向函数一样被调用
template<class T>
class Less
{
public:
	bool operator()(const T& x, const T& y)
	{
		return x < y;
	}
};

template<class T>
class Greater
{
public:
	bool operator()(const T& x, const T& y)
	{
		return x > y;
	}
};

库里面
//template <class T> struct less : binary_function <T, T, bool> {
//	bool operator() (const T& x, const T& y) const { return x < y; }
//};
//
//template <class T> struct greater : binary_function <T, T, bool> {
//	bool operator() (const T& x, const T& y) const { return x > y; }
//};

迭代器区间

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

容器对象的构造函数还支持迭代器区间初始化,就是通过迭代器去迭代别的对象中存的值来对这个对象进行初始化。

template<class InputInterator>
priority_queue(InputInterator first, InputInterator last)
{
	//插入数据
	while (first != last)
	{
		_con.push_back(*first);
		++first;
	}

	//建堆
	//从最后一个非叶子节点开始建堆-----关键
	for (int i = (_con.size()-1-1) / 2; i >= 0; i--)
	{
		AdjustDown(i);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1169564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用vscode开发uniapp项目常用的辅助插件,提升开发效率

为什么不使用hbuilder开发呢&#xff1f;因为hbuilder对ts和vue3语法支持并不友好&#xff0c;而且代码提示不智能&#xff0c;也不能使用最近很流行的coplit和CodeGeex智能提示&#xff0c;所以就换掉hbulider&#xff0c;使用我们熟悉的vscode开发吧。 第一个&#xff1a;un…

WPF布局控件之DockPanel布局

前言&#xff1a;博主文章仅用于学习、研究和交流目的&#xff0c;不足和错误之处在所难免&#xff0c;希望大家能够批评指出&#xff0c;博主核实后马上更改。 概述&#xff1a; DockPanel 位置子控件基于子 Dock 属性&#xff0c;你有 4 个选项停靠&#xff0c;左 (默认) &…

coalesce函数(SQL )

用途&#xff1a; 将控制替换成其他值&#xff1b;返回第一个非空值 表达式 COALESCE是一个函数&#xff0c; (expression_1, expression_2, …,expression_n)依次参考各参数表达式&#xff0c;遇到非null值即停止并返回该值。如果所有的表达式都是空值&#xff0c;最终将返…

0xGame Web 2023

0xGame Web 2023 [Week 1] signin 这题直接看源码就行&#xff0c;easy [Week 1] baby_php OST /?aQNKCDZO&b240610708 HTTP/1.1 Host: 120.27.148.152:50014 Content-Length: 11 Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 Origin: htt…

C++二分查找算法的应用:长度递增组的最大数目

本文涉及的基础知识点 二分查找 题目 给你一个下标从 0 开始、长度为 n 的数组 usageLimits 。 你的任务是使用从 0 到 n - 1 的数字创建若干组&#xff0c;并确保每个数字 i 在 所有组 中使用的次数总共不超过 usageLimits[i] 次。此外&#xff0c;还必须满足以下条件&…

升级 MacOS 系统后,playCover 内游戏打不开了如何解决

我们有些小伙伴在升级了 macOS 系统后大概率会遇到之前能够正常使用的 playCover 突然游戏打不开了&#xff0c;最近 mac 刚刚正式推出了 MacOS 14.1 ,导致很多用户打开游戏会闪退&#xff0c;我们其实只需要更新一下 playCover 就可以解决 playCover 正式版更新会比较慢所以我…

PyQt界面开发(全)

文章目录 前言一、PyQt 简介二、PyQt 与 Qt 的蒙娜丽莎三、PyQt 布局管理器3.1、简介3.2、项目实战3.2.0、添加伸缩项 layout.addStretch&#xff1a;控制布局中组件之间的间距。3.2.1、垂直布局管理器 QVBoxLayout&#xff1a;控件按照从上到下的顺序排列3.2.2、水平布局管理器…

firefox浏览器添加自定义搜索引擎方法

firefox浏览器添加自定义搜索引擎方法 1.在地址栏添加搜索引擎2.Mycroft Project 搜索引擎附加组件3.通过扩展插件添加自定义搜索引擎 Firefox这货居然不支持直接网址%s的搜索引擎定义方式&#xff0c;以下是添加方法。 firefox国际版119.0 1.在地址栏添加搜索引擎 &#xff…

Android:怎么学习才能更好的进大厂呢?

怎么学习才能更好的进大厂呢&#xff1f; 很多朋友都在问这个问题。 其实没有什么特别的技巧&#xff0c;就是依靠自己的毅力和决心。一天做不到&#xff0c;就一个月&#xff1b;一个月做不到&#xff0c;就一年。只要有决心&#xff0c;无论学历或资历如何&#xff0c;都不是…

Zookeeper和Kafka安装

Zookeeper和Kafka安装 1、Windows下的安装 1.1 安装JAVA JDK 请参考《Windows环境下JDK的安装》 JDK版本&#xff1a; 1.2 安装ZooKeeper 1、 下载安装包 http://zookeeper.apache.org/releases.html#download 这里下载的版本为3.4.9 2、 解压并进入ZooKeeper目录&…

C++ 模板特化

非类型模板参数 定义&#xff1a;对于函数模板和类模板&#xff0c;模板参数并不局限于类型&#xff0c;普通值也可以作为模板参数 非类型模板参数定义的是常量 template<typename T, size_t N> class array; //T&#xff1a;类型模板参数 //N&#xff1a;非类型模板参…

【鸿蒙软件开发】UIAbility组件概况、生命周期与启动模式

文章目录 前言一、UIAbility概况1.1 概况介绍1.2 声明配置 二、UIAbility组件生命周期2.1 基本概念2.2 生命周期状态说明Create状态WindowStageCreate和WindowStageDestroy状态Foreground和Background状态Destroy状态 三、UIAbility的启动模式3.1 singleton启动模式说明进行配置…

根据Aurora发送时序,造Aurora 数据包,从而进行AXIS接口数据位宽转换仿真

首先Aurora采用AXIS接口 由于后续需要进行AXIS接口 不同时钟域的数据位宽转换&#xff08;64bit和256bit之间的转换&#xff09;&#xff0c;因此分两次走。 第一种方法&#xff1a;采用AXIS数据位宽转换IP AXIS跨时钟域IP 第二种方法&#xff1a;逻辑完成 下面记录逻辑…

android display 杂谈(三)WMS

用来记录学习wms&#xff0c;后续会一点一点更新。。。。。。 代码&#xff1a;android14 WMS是在SystemServer进程中启动的 在SystemServer中的main方法中&#xff0c;调用run方法。 private void run() { // Initialize native services.初始化服务&#xff0c;加载andro…

路由器基础(八):策略路由配置

在实际网络应用中&#xff0c;策略路由也是一种重要的技术手段。尽管 在考试并不注重策略路由&#xff0c;但是实际上应用较多&#xff0c;建议考生除了掌握基本的静态路由协议IP route-static, 动态路由协议RIP 、OSPF的基础配置外&#xff0c;还要掌握如何配置策略路由。…

JavaScript事件委托原理详解!

通过JavaScript事件的冒泡来动态为元素绑定事件的方法称为事件委托&#xff08;Event Delegation&#xff0c;也称为“事件代理”&#xff09;&#xff0c;是 JavaScript 中最热门的技术之一&#xff0c;在笔试和面试中是常考察的重点知识点&#xff0c;今天来简单介绍一下相关…

成人听力筛查的现状

作者&#xff1a;兰明&#xff0c;医学硕士&#xff0c;听力学博士&#xff0c;听觉健康门诊主任。 你有听力障碍吗&#xff1f;你的家人有听力障碍吗&#xff1f;如果有人提出这样的问题&#xff0c;你的回答多数都是“真不知道”。为什么&#xff1f; 因为我们缺乏成人…

【C语法学习】10 - printf()函数

文章目录 1 函数原型2 参数2.1 格式字符串2.1.1 字面文本量2.1.2 转义序列2.1.3 转换说明2.1.3.1 类型2.1.3.2 类型长度2.1.3.3 精度2.1.3.4 最小宽度2.1.3.5 标志 2.2 参数列表2.3 转换说明和参数列表的关系 3 返回值 1 函数原型 printf()&#xff1a;将格式化输出发送至标准…

毅速丨3D打印在零件修复上潜力巨大

随着科技的飞速发展&#xff0c;3D打印技术逐渐渗透到各个领域&#xff0c;在零件修复方面&#xff0c;3D打印也展现出巨大的潜力和优势。 3D打印技术是一种基于数字模型文件的制造技术&#xff0c;采用逐层堆积材料的方式来制造物体。它具有制造复杂形状零件的能力&#xff0c…

腾讯云3年/5年特惠云服务器购买入口及攻略

腾讯云是腾讯旗下云计算品牌&#xff0c;为了吸引用户经常推出各种优惠活动&#xff0c;最吸引用户的还是特惠云服务器&#xff0c;下面给大家分享腾讯云3年/5年时长特惠服务器购买入口及教程&#xff01; 购买入口&#xff1a;传送门>>> 购买攻略&#xff1a; 进入…