C++ 适配器

news2024/9/19 14:02:52

适配器

适配器是一种设计模式,我们最终实现的功能可以通过不同的路径来实现,那么这个路径就可以称作适配器。

例如下面的例子:

那么在c++中也有适配器,例如stack、queue、priority_queue,它们并不是使用了什么新的内存形式,而是利用适配了其他的容器,然后来实现自己的功能。下面我们用几个例子来举例

栈举例

如果有在C语言的时候学习数据结构的同学就知道,我们在实现stack的时候,发现和顺序表的代码其实是差不多的,就是因为内存形式是相同的,顺序表的内存特点可以支持栈的功能实现。

但是我们的栈并不是只能用顺序表实现,也可以用链表和双端队列,所以栈可以利用很多的容器来实现自己的功能,这种就叫适配器。

优先级队列举例

我们再拿优先级队列来看,优先级队列就是堆,堆需要支持随机访问来快速找到子节点和父节点。而堆的实际结构就是连续内存(连续内存就可以快速访问),所以像顺序表、双端队列(双端队列虽然不是连续内存,但是它的下标访问也是比较快的)都可以拿来给堆来实现相应的功能,只是顺序表是最优选择而已。

队列举例

队列只要求可以一边进另一边出,两边可以读取,那么只要是满足这些要求的容器都可以被适配,例如双端队列和链表,我们的顺序表甚至也行,只是在头部操作的时候效率不高而已。

总结

适配器其实就是利用其他容器的内存特点和接口来实现自己的功能的特殊容器,stl并不把它叫做容器,因为根本上就是用的别人的,叫适配器更加合理贴切。

我们进行容器来进行适配的时候,要结合适配器需要的内存特点来合理筛选,保证效率最优。

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

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

相关文章

【python爬虫】利用Python爬取天气数据,并做可视化分析

首先登录网站,查看网页内容及数据格式(使用代码查看内容),选择两个城市及对应月份,爬取对应天气数据,进行数据预处理(如缺失值处理、数据类型转换、字符串截取等),数据的初步探索性分析(如描述性统计、数据可视化查看数…

应对猫咪掉毛挑战,希喂、小米热门宠物空气净化器实测功效PK

随着养宠人群的增多,铲屎官们的需求日益增长,市场上出现了很多品牌的宠物空气净化器。然而,产品质量参差不齐,给消费者选择带来不少困难。劣质宠物空气净化器不仅无法有效去除宠物毛发、皮屑、异味及空气中的有害微粒,…

启动虚拟机:另一个程序已锁定文件的一部分,进程无法访问,打不开磁盘xxx或它所依赖的某个快照磁盘

theme: nico 你们好,我是金金金。 场景 启动虚拟机时报错如下 造成error的原因 这是一种虚拟机的保护机制 虚拟机在运行时,为了防止数据被篡改,会将所运行的文件保护起来。 当虚拟机突然崩溃或强制结束导致异常退出(我昨天是直接…

【C++】设计模式 — 从零开始认识单例模式

人的一生本来就是一场有来无回的冒险。 --- priest 《残次品》--- 设计模式 — 单例模式 1 设计模式2 单例模式2.1 饿汉模式2.2 懒汉模式 3 总结 1 设计模式 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结…

YZ系列工具之YZ05:代码运行中调用“计算器”使用说明

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…

语音播报加入预警系统

语音播报加入预警系统 引言 引入语音警报 我们前一章, 已经把jq8900-16p模块, 单独进行了测试, 可以通过发送命令, 让模块播报设定好的声音。那么语音播报, 在预警系统中, 也必不可少, 我们现在有了led灯光警报,如果主人在睡觉, 是不能及时…

redis列表若干记录

2、列表 ziplist ziplist参数 entry结构 entry-data:节点存储的元素prelen:记录前驱节点长度encoding:当前节点编码格式encoding encoding属性 使用多个子节点存储节点元素长度,这种多字节数据存储在计算机内存中或者进行网络传输的时的字节…

排序算法——插入排序

一、插入排序概念 直接插入排序(Insertion Sort)是一种简单的排序算法,它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插…

ubuntu、cpolar、api开启映射之路

1.国内cpolar安装 curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash或 cpolar短链接安装方式:(国外使用) curl -sL https://git.io/cpolar | sudo bash2.查看版本号,正常显示即为安装成功 cpolar …

HR系统怎么选?2024年10大热门工具评测

本文中介绍的工具有:Moka、名才MCHR、HiHR、华天动力HRM、红海eHR、易路eRoad、宏景HJSOFT、Gusto、Zenefits、BambooHR。 在当今竞争激烈的商业环境中,找到一个适合企业的HR系统可能是一个令人头疼的问题。市面上的HR工具琳琅满目,各有千秋&…

Django 自定义用户 VS 用户资料

Django是一个流行的Web框架,它提供了一套完整的用户认证系统,其中包括内置的User模型用于存储基本的用户信息,如用户名、密码等。然而,如果我们需要更详细的用户资料管理,比如添加更多的字段或者自定义验证规则&#x…

Linux 常见的冷知识集锦

一、前言 本文旨在记录那些常见的Linux概念和名词,但这些又没经常直接使用到,更多在底层运行,见过却又不是特别清楚的碎片知识,以温故知新。 二、知识点和概念说明 2.1、POSIX标准/协议 POSIX(Portable Operating S…

股票技术指标 RSI KDJ MACD

具体指标解释,大模型都有,只说作用 RSI(Relative Strength Index,相对强弱指数) 超买和超卖水平:通常情况下,RSI值超过70表示市场可能超买,而低于30表示可能超卖。这并不意味着价格…

数据结构:顺序二叉树(堆)

目录 前言 一、堆的实现 1.1 头文件 1.2 堆的初始化及销毁 1.3 堆的插入 1.4 堆的删除 1.5 取堆顶数据和判空 前言 前面我们讲了二叉树有顺序结构和链式结构,今天就来讲一下顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间…

HTTP请求的流转路径,从Tomcat到SpringMVC

本文主要讲一下,一个HTTP请求在后端服务的流转路径,Tomcat等一众servlet容器如何定义了Web应用的基础样貌,后来的MVC框架又是如何弱化了servlet的存在,改为自己实现请求派发的。 前些日子我写了十几篇文章来介绍Tomcat的架构&…

AI在医学领域:联邦学习 (FL) 在肿瘤学的应用综述

关键词:联邦学习 (Federated Learning, FL)、机器学习 (Machine Learning, ML)、肿瘤学 (Oncology)、数据隐私 (Data Privacy)、精准医疗 (Precision Medicine)、多模态 (Multi-modal) 肿瘤学正在经历快速的变革,这得益于机器学习(ML&#xf…

tinymce字体为48px后再设置numlist数字列表导致前面的序号字体不对--【已解决】

问题描述: tinymce选择完大号字体,如48px,再选择数字列表,会导致数字列表的序号字体不对。 解决: 演示效果

【C语言篇】C语言常考及易错题整理DAY3

文章目录 选择题整形提升与算术转换左移右移操作符操作符优先级与结合性后置指针变量基本知识 编程题最大连续1的个数完全数计算单词倒排面试题.珠玑妙算两数之和 选择题 整形提升与算术转换 声明以下变量,则表达式: ch/i (f*d – i) 的结果类型为( &…

Fal.ai Flux 1-Pro/Viva.ai/哩布哩布AI:AI绘图部分免费工具+原图提示词Prompt

目录 #1 找软件 #2 懂提示词 #3 更难的一步,会英文 我个人认为,想要玩文生图,你要会3个步骤: #1 找软件 主流文生图软件:Midjourney、Stable Diffusion、Dall-E 3 巧了,我用的都是小众、免费的画笔工…

Linux 错误码

目录 一、概述二、含义三、错误处理函数1、IS_ERR2、strerr、perror 一、概述 在 Linux 系统中,错误码是用来表示操作系统运行过程中发生的错误的数字代码。错误码通常由负数表示,0 表示成功,正数表示警告或其他非致命错误。 为了开发者更好…