STL标准库(五) 算法,伪函数与空间适配器

伪函数

仿函数:像函数但不是函数,一般有两种形式struct或class

struct或class之所以能够进行仿函数的编写是因为他们可以进行()的运算符重载

int Min(int nNumberA, int nNumberB) 这是一个函数

{

    return nNumberA < nNumberB ? nNumberA : nNumberB;

}

以下一个程序进行演示:

当仿函数是stuct形式时:

struct sMin

{

    int operator()(int nNumberA, int nNumberB)

    {

       return nNumberA < nNumberB ? nNumberA : nNumberB;

    }

}; 该种形式实现了上述函数类似的功能

当仿函数是class形式时:

class cMin

{

public:

    int operator()(int nNumberA, int nNumberB)

    {

       return nNumberA < nNumberB ? nNumberA : nNumberB;

    }

int main()

{

    std::cout << Min(50, 100) << std::endl;

    struct sMin objs;

    std::cout << objs(50, 100) << std::endl; 结构体形式仿函数的第一种调用

    std::cout << sMin()(50, 100) << std::endl; 结构体形式仿函数的第二种调用

    std::cout << cMin()(50, 100) << std::endl; 类形式仿函数的调用

    return 0;

}

空间适配器

空间适配器顾名思义就是取分配回收内存空间,具有可以分为两种行为,一种针对普通变量。一种针对类

下面以一个程序演示讲解

int main()

{

空间适配器对普通变量的应用:

    std::allocator<int> obj;  定义一个空间适配器

    int * p = obj.allocate(1); 利用空间适配器进行分配空间,()中的数字代表要分配的定义的类型的空间大小,此处分配一个int类型内存空间

    obj.construct(p, 12138); 利用空间适配器构造一个变量并赋值

    std::cout << *p << std::endl; 打印12138,可以正常使用

    *p = 100; 也可以解引用修改值

    std::cout << *p << std::endl;  同样也可以正常打印

    int *nAddr = obj.address(*p);  利用空间适配器设置两个内存指向相同类型的对象

    std::cout << nAddr << "\t" << p << std::endl; 两个指针指向同一个位置

    int Temp = 500;

    int *nAddr = obj.address(Temp); 这种形式类似于上述方法,两个变量

内存同样指向同一内存地址

    std::cout << nAddr << "\t" << *nAddr << std::endl; 打印该变量地址及数据

以上两种空间适配器的应用类似于申请引用

    std::cout << obj.max_size() << std::endl; 可以获取空间支配器最大的大小

    obj.deallocate(p, 1); p伪分配内存的对象,1为要回收内存的大小,用于回收该空间适配器分配

的对象内存大小 ​​​​​​​

空间适配器对类的应用:

    std::allocator<MyClass> objc; 申请了一个类的类型的空间适配器

    MyClass * tObj = objc.allocate(1); 创建一个类对象并利用空间适配器申请内存

    objc.construct(tObj, 12138); 利用空间适配器进行构造类对象

    std::cout << tObj->nNumber << std::endl;

    objc.destroy(tObj); 销毁类对象

    objc.deallocate(tObj, 1);  回收内存

    system("pause");

    return 0;

}

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

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

相关文章

Linux 网络流量相关工具

本文聚焦于网络流量的查看、端口占用查看。至于网络设备的管理和配置&#xff0c;因为太过复杂且不同发行版有较大差异&#xff0c;这里就不赘述&#xff0c;后面看情况再写。 需要注意的是&#xff0c;这里列出的每一个工具都有丰富的功能&#xff0c;流量/端口信息查看只是其…

使用vue_cli脚手架创建Vue项目(cmd和图形化方式)

使用vue_cli脚手架创建Vue项目&#xff08;cmd和图形化方式&#xff09; 创建项目(cmd方式) vue create vue_cli1.方向键选择manually select feature(手动选择方式创建)&#xff0c;回车 2.按空格键选择需要的组件&#xff1a;Babel、PWA、Router、Vuex、CSS&#xff0c;回…

Linux - 数据流重定向、管道符、环境变量配置文件的加载

概述 想了解Linux编程&#xff0c;shell脚本是绕不开的关键知识点&#xff0c;原计划写一个整篇来分享shell的来龙去脉&#xff0c;但知识点过于繁杂&#xff0c;先分享一下学习shell的准备工作&#xff0c;数据流重定向、管道符、环境变量配置文件的加载&#xff0c;有助于知…

Linux之安装配置CentOS 7

一、CentOS简介 CentOS&#xff08;Community Enterprise Operating System&#xff0c;中文意思是社区企业操作系统&#xff09;是Linux发行版之一&#xff0c;它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码&#xff0c…

YOLOv8改进 | Conv篇 | 结合Dual思想利用HetConv创新一种全新轻量化结构CSPHet(参数量下降70W)

一、本文介绍 本文给大家带来的改进机制是我结合Dual的思想利用HetConv提出一种全新的结构CSPHet,我们将其用于替换我们的C2f结构,可以将参数降低越75W,GFLOPs降低至6.6GFLOPs,同时本文结构为我独家创新,全网无第二份,非常适合用于发表论文,该结构非常灵活,利用Dual卷…

CSS探索浏览器兼容性

学习如何探索浏览器的兼容性对于编写跨浏览器兼容的CSS代码非常重要。以下是一些学习CSS兼容性的方法&#xff1a; MDN文档&#xff1a;Mozilla开发者网络&#xff08;MDN&#xff09;提供了广泛而详细的CSS文档&#xff0c;其中包含有关CSS属性、选择器和功能的信息。在MDN上…

机器学习之pandas库学习

这里写目录标题 pandas介绍pandas核心数据结构SeriesDataFrameDataFrame的创建列访问列添加列删除行访问行添加行删除数据修改 pandas介绍 pandas是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。Pandas 纳入 了大量库和一些标准的数据模型&#xff…

谷歌seo服务商如何选择?

选择谷歌SEO服务商时&#xff0c;要考虑他们的经验、专业知识、成功案例、透明度、合规性、定制能力、时间线、客户支持、沟通以及是否能够建立长期合作关系。综合评估这些因素&#xff0c;确保找到一个可信赖的合作伙伴&#xff0c;能够帮助您提升网站在谷歌搜索中的表现&…

PHP操作Mysql记录数多引发的空白错误

1 错误由来 php操作三张表&#xff0c;一张表有近四十万条记录&#xff0c;另外两张表记录数在三万左右&#xff0c;三张表又关联。应用左连接left join。 $qLStr "select pu.pd_no, pu.common_name, pu.purchase_cost, pu.medication_area, pu.total_dosage, pu.contro…

相机与镜头

一、相机视场 相机的视场角&#xff0c;也就是相机能够看到物像角度的最大值&#xff0c;视场角与焦距的关系为像高f*tan(fov/2)。由于相机的感光面是矩形&#xff0c;所以相机能够看到的区域也是矩形。探究相机的视场角&#xff0c;便于分析物面上那些区域属于相机盲区&#x…

STM正点mini-新建工程模板,GPIO及寄存器(介绍)

一.新建工程模板(基于固件库) 1.1库函数与寄存器的区别 这里的启动文件都是根据容量来进行区分的 对MDK而言即使include了&#xff0c;也不知道在哪里找头文件 STM32F10X_HD,USE_STDPERIPH_DRIVER 二.新建工程模板(基于寄存器) 上面的大部分配置与固件库的一样 具体可以看手…

带延迟的随机逼近方案(Stochastic approximation schemes):在网络和机器学习中的应用

1. 并行队列系统中的动态定价Dynamic pricing 1.1 系统的表述 一个含有并行队列的动态定价系统&#xff0c;该系统中对于每个队列有一个入口收费(entry charge) &#xff0c;且系统运行的目标是保持队列长度接近于某个理想的配置。 这里是这个系统的几个关键假设&#xff1a;…

redis-4 搭建redis集群

1.为什么需要redis集群&#xff1f; Redis 集群提供了高可用性、横向扩展和数据分片等功能&#xff0c;使得 Redis 能够应对大规模的数据存储和高并发访问的需求。以下是一些需要使用 Redis 集群的常见情况&#xff1a; 高可用性&#xff1a;通过在多个节点之间进行数据复制和…

计算机网络——TCP协议

&#x1f4a1;TCP的可靠不在于它是否可以把数据100%传输过去&#xff0c;而是 1.发送方发去数据后&#xff0c;可以知道接收方是否收到数据&#xff1b;2.如果接收方没收到&#xff0c;可以有补救手段&#xff1b; 图1.TCP组成图 TCP的可靠性是付出代价的&#xff0c;即传输效率…

苹果提审被拒反馈崩溃日志.text | iOS 审核被拒crashLog

iOS审核人员拒绝后每个截图&#xff0c;只给了几个text文件&#xff0c;这种情况就是审核的时候运行你的代码&#xff0c;崩溃了。 仅仅看text文件&#xff0c;是看不出所以然来的&#xff0c;所以我们要将日志转换成.crash格式 1.将.text文件下载下来&#xff0c;将 .text手动…

【Linux】进程间通信概念 | 匿名管道

文章目录 一、什么是进程间通信进程间通信的概念进程间通信的目的进程间通信的分类进程间通信的本质 二、什么是管道三、匿名管道匿名管道的原理✨站在内核角度理解管道✨站在文件描述符角度理解管道 pipe系统调用fork后在父子进程间使用管道通信代码实现 匿名管道的读写规则管…

stable diffusion学习笔记——文生图(一)

模型设置 基本模型 基本模型也就是常说的checkpoint&#xff08;大模型&#xff09;&#xff0c;基本模型决定了生成图片的主体风格。 如上图所示&#xff0c;基本模型的后缀为.safetensors。需要存放在特定的文件夹下。 如果用的是启动器&#xff0c;可以在启动器内直接下载。…

GPT-SoVITS 本地搭建踩坑

GPT-SoVITS 本地搭建踩坑 前言搭建下载解压VSCode打开安装依赖包修改内容1.重新安装版本2.修改文件内容 运行总结 前言 传言GPT-SoVITS作为当前与BertVits2.3并列的TTS大模型&#xff0c;于是本地搭了一个&#xff0c;简单说一下坑。 搭建 下载 到GitHub点击此处下载 http…

对机器学习的认知,感悟。

关于AI&#xff1a; AI&#xff08;Artificial Intelligence&#xff09;即人工智能&#xff0c;是计算机科学的一个分支&#xff0c;它致力于研究、开发和应用模仿人类智能的理论、方法、技术及应用系统。AI的目标是使机器能够完成那些需要人类智能才能完成的任务&#xff0c…

在JavaScript中获取当前时间yyyymmddhhmmss的六种实现方式

在编写JavaScript代码时&#xff0c;遇到需要获取当前日期和时间并将其格式化为 yyyymmddhhmmss 字符串的情况。可以使用本文中介绍的几种实现方式中的任意一种。 方法一&#xff1a;使用Date对象 使用 Date 对象来获取当前日期和时间。 示例代码&#xff1a; const now new D…