C++的函数适配器

C++基础4:函数适配器 函数适配器技术可以在不修改源代码的基础上,增加函数的功能。是对面向对象开闭原则的体现。在C++ STL中就是用了大量的函数适配器,比如not1。} }我们定义了一个仿函数类,该类很简单,就是把传入的flag,直接返回。opt(flag);} }该适配器的功能是在原有功能的基础上,取反。以上就是今天要讲的内容,函数适配器是STL很重要的一部分,遍历集合函数中的条件语句,用到了很多的函数适配器。 阅读详情

扩展函数的参数接口(假如函数有一个参数 再扩展一个接口 据可以传递两个参数)

绑定参数

bind2nd 和bind1st区别
bind2nd:将外界数据 绑定到第二个参数
bind1st:将外界数据 绑定到第一个参数

注意:
binary_function 二元继承
unary_function 一元继承

//val 是for_each提供  tmp
//适配器2:公共继承binary_function
//适配器3:参数的萃取
//适配器4:对operator()进行const修饰
class MyPrint:public binary_function<int,int, void>
{
public:
    void operator()(int val,int tmp) const
    {
        cout<<val+tmp<<" ";
    }
};

void test05()
{
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    v.push_back(50);

    //适配器1:bind2nd 或bind1st 绑定参数
    for_each(v.begin(), v.end(), bind2nd(MyPrint(),1000) );
    cout<<endl;
}

运行结果:
在这里插入图片描述

取反适配器

not1一元取反
not2二元取反

//取反适配器2:public unary_function
//取反适配器3:参数萃取
//取反适配器4:const修饰operator()
class MyGreaterThan3:public unary_function<int,bool>
{
public:
    //一元谓词
    bool operator()(int val)const
    {
        return val>3;
    }
};
void test06()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    //找出第一个大于3的数
    vector<int>::iterator ret;
    ret = find_if(v.begin(),v.end(), MyGreaterThan3() );
    if(ret != v.end())
    {
        cout<<"*ret = "<<*ret<<endl;//4
    }

    //找出第一个小于3的数
    //取反适配器1:not1修饰
    ret = find_if(v.begin(),v.end(), not1(MyGreaterThan3()) );
    if(ret != v.end())
    {
        cout<<"*ret = "<<*ret<<endl;//4
    }
}

运行结果:
在这里插入图片描述

成员函数适配器mem_fun_ref

class Person
{
public:
    string name;
    int age;
    Person(string name,int age)
    {
        this->name = name;
        this->age = age;
    }
    void showPerson()
    {
        cout<<"name = "<<this->name<<",age="<<this->age<<endl;
    }
};
void myPrintPerson(Person &ob)
{
    cout<<"name = "<<ob.name<<",age="<<ob.age<<endl;
}
void test08()
{
    vector<Person> v;
    v.push_back(Person("德玛西亚",18));
    v.push_back(Person("狗头",28));
    v.push_back(Person("牛头",19));
    v.push_back(Person("小法",38));

    //遍历 myPrintPerson普通函数
    //for_each(v.begin(),v.end(), myPrintPerson );
    //遍历  Person成员函数
    //利用 mem_fun_ref 将Person内部成员函数适配
    for_each(v.begin(),v.end(), mem_fun_ref(&Person::showPerson) );
}

运行结果:
在这里插入图片描述

普通函数作为适配器 ptr_fun

//普通函数 作为适配器
void myPrintInt01(int val,int tmp)
{
    cout<<val+tmp<<" ";
}
void test01()
{
    vector<int> v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);

    //普通函数 需要使用ptr_fun转换成函数适配器
    for_each(v.begin(),v.end(), bind2nd(ptr_fun(myPrintInt01),1000));
    cout<<endl;
}

运行结果:
在这里插入图片描述

C++ binary_function与unary_function使用详解 一、unary_function的介绍 unary_function可以作为一个一元函数对象的基类,它只定义了参数和返回值的类型,本身并不重载()操作符,这个任务应该交由派生类去完成。 源码 template <class Arg, class Result> struct unary_function; template <class Arg, class Result> // 1个参数,一个返回值 struct 阅读详情

相关推荐

C++ STL标准库 仿函数和适配器

目录 一、仿函数 functors 二、函数适配器 1.迭代器适配器 1.1 reverse_iterator 1.2 inserter 2.容器适配器 3.仿函数适配器 3.1 bind2nd 3.2 not1 3.3 新型适配器 bind 4.未知适配器 4.1 ostream_iterator输出流迭代器 4.1 istream_iterator输入流迭代器 ...

SimonxxSun的博客 849

C++之函数适配器

函数适配器 头文件:functional 系统仿函数和适配器头文件 一、定义 函数对象适配器是完成一些配接工作,这些配接包括绑定(bind),否定(negate),以及对一般函数或成员函数的修饰,使其成为函数对象。 绑定器: bind1st 将参数绑定为二元函数对象的第一个参数。 操作的可调用对象,必须是仿函数 bind2nd 将参数绑定为二元函数对象的第二个参数。 操作的可调用对象,必须是仿函数 bind 将参数绑定为n元函数对象的,第n个参数。 操作的只要是可调用对象即可 求反器: n

weixin_51448994的博客 592

重装系统后,恢复Oracle的.ORA文件

前几天,系统莫名奇妙产生很多宏病毒,进而感染整个C盘,不得已,格式化后重装了系统。 重装系统之后,突然想到D盘中的oracle中很多数据没导出来备份,安装文件下有很多有用的.ORA文件,抱着死马当活马医的态度,居然成功了。 1、将原来D盘(D:\oracle\product\10.2.0\oradata\orcl)下的数据文件备份下其他盘,将D盘的oracle目录名改成oracle1。安装数据

zhanggnol的blog 5551

【代码分析】初学解惑C++:函数适配器

我们定义了一个仿函数类,该类很简单,就是把传入的flag,直接返回。该适配器的功能是在原有功能的基础上,取反。protected:public://重载了括号,所以RealTrueAdaptorNot(arg),arg的值给了opt(x)的x,又传给了flagreturn!opt(flag);只要类继承了my_unary_function类,就可以被下面的AdaptorNot适配。

啊枫 654

QGIS实用功能:加载天地图与下载指定区域遥感影像

本文聚焦 QGIS 软件实用功能,详细介绍在 QGIS 中加载天地图及其他常用底图(如 Google Maps、Bing Maps)的完整流程,涵盖天地图插件安装、密钥获取与配置、插件拓展使用等操作。同时,以 上海市瑞金二路街道为例,分步讲解下载指定区域遥感影像的方法,包括图层选择、坐标系设置、分辨率调整等关键参数配置。此外,还介绍了影像精准裁剪技巧,为 GIS 数据获取与处理提供实用指导,助力用户高效使用 QGIS 开展地理信息相关工作。

weixin_43679228的博客 7445

【毕设】基于LoRa的物联网控制器:从原理图到PCB的完整硬件设计指南

本文提供了一份完整的基于LoRa的物联网控制器硬件设计指南,涵盖从系统框图、原理图设计到PCB布局布线的全流程。详细讲解了电源电路、单片机最小系统、信号接口以及LoRa无线模块等核心模块的设计要点与抗干扰技巧,并分享了实用的调试心得,旨在帮助电子、物联网专业学生顺利完成毕业设计,掌握低功耗远距离物联网节点的硬件开发实践。

weixin_42126677的博客 307

C++基础知识(二十)--- 函数对象适配器

容器通过空间配置器取得数据存储空间,空间配置器管理容器的空间。将二元函数对象转为一元函数对象。

woshizuopie的博客 979

从业务角色到工作台:一步步创建 SAP Fiori Launchpad Space 与 Page

SAP S/4HANA Launchpad 配置优化指南:从业务角色出发构建高效工作台 本文针对S/4HANA项目中用户普遍反映的"入口难找"问题,提出基于Spaces和Pages的系统化解决方案。通过"以工作岗位为中心"的设计理念,将Launchpad信息架构重构为:一个业务角色对应一个Space,每个Space包含1-5个Page,Page内按任务划分2-5个Section,每个Section放置3-7个Tiles。文章详细阐述了从Business Role入手配

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 228

c++中的函数适配器

函数适配器 函数适配器概念 STL中定义了大量的函数对象,但是有时候需要对函数返回值进行进一步的简单计算,或者填上多余的参数,不能直接代入算法,函数适配器实现了这一功能,将一种函数对象转化为另一种符合要求的函数对象,函数适配器可以分为4大类,绑定适配器,组合适配器,指针函数适配器和成员函数适配器 直接构造STL中的函数适配器通常会导致冗长的类型声明。为简化安徽念书适配器的构造,STL还提供了函数...

LXY的博客 2513

前端使用二开Thingsboard一、二、三事(三)-规则链

以项目实战为基础,逐步介绍前端在thingsboard系统二次开发中的一些注意事项以及一些thingsboard一些页面功能讲解,为前端人员开发使用thingsboard提供一种可靠思路,打造一个完美的物联网系统。

weixin_43163457的博客 863

使用Clumsy和Process Explorer定位软件高CPU占用问题

使用弱网模拟工具Clumsy和进程查看工具Process Explorer定位软件高CPU占用问题。

dvlinker的技术专栏 5709

C++函数适配器

先弄清几个概念,什么叫一元函数,二元函数 1.    一元函数一个参数 2. 二元函数 两个参数 3. 一元谓词 一个参数,返回类型为bool型 4. 二元谓词 两个参数,返回类型为bool型 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征。因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候就需要函数适配器来为我们的函数进行

晴天的专栏 2744

18、动态系统响应分析

本文系统地介绍了动态系统响应的分析方法,涵盖传递函数建模、特殊输入下的响应特性(如脉冲和阶跃响应)、终值与初值定理的应用、系统直流增益的计算,并深入探讨了一阶和二阶系统的时域特性。通过实例分析与MATLAB仿真,展示了不同参数对系统行为的影响。文章还总结了系统响应在控制设计与故障诊断中的实际应用,并展望了多变量、非线性及实时响应分析的未来研究方向。配合流程图,提供了清晰的系统分析与设计路径。

kite3的博客 142

普通函数适配器基本用法.cpp

《C++STL基础及应用》 #include <iostream> #include<functional> #include<algorithm> #include<vector> #include<string> using namespace std; /* 函数适配器 一 绑定,用于将二元函数降为一元函数 bindlst()...

qq_32140289的博客 215

Python 爬虫实战:爬取微博热搜与用户评论数据

本文系统讲解微博热搜榜单与用户评论数据的爬取技术方案。针对微博热搜榜采用Requests+BeautifulSoup解析静态HTML结构,实现高效爬取;对于动态加载的评论数据,使用Selenium模拟浏览器行为规避反爬机制。详细阐述技术选型、反爬策略、数据清洗及存储方法,提供完整代码实现和输出示例。同时强调合规要求,提示开发者需在遵守平台规则的前提下进行数据采集。该方案为舆情分析和热点研究提供了可落地的技术实现路径。

2503_91057718的博客 1717

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

成员函数适配器基本用法.cpp

《C++STL基础及应用》 #include <iostream> #include<functional> #include<algorithm> #include<vector> #include<string> using namespace std; /* 函数适配器 一 绑定,用于将二元函数降为一元函数 bindlst()...

qq_32140289的博客 237

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

35 C++ STL模板库4-函数适配器

本文介绍了C++ STL中的函数适配器,重点讲解了三种绑定器:bind1st、bind2nd和bind。前两者已弃用,用于将二元函数对象转换为一元函数对象;bind更灵活,可绑定任意参数位置和类型,支持函数、成员函数和Lambda。文章详细说明了bind的用法,包括占位符(_1,_2等)的使用、参数绑定规则和注意事项,特别强调了函数重载时需显式指定类型。通过多个代码示例展示了不同绑定方式的输出结果,帮助理解参数绑定和占位符的工作机制。

17208955的博客 1103

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C++函数适配器和函数包装器:让你的函数更灵活

C++函数适配器和函数包装器:让你的函数更灵活

热爱编程的小K的博客 2178

C++ STL(十一):适配器(函数对象适配器、取反适配器、函数指针适配器、成员函数适配器)

文章目录1 函数对象适配器 1 函数对象适配器 作用:修饰函数对象/仿函数,提供适配功能。 问题案例: 使用for_each算法和函数对象/仿函数遍历容器的元素时: ①若希望原容器元素经某种运算(如与给定值100进行加法运算)后,再输出运算结果; ②给定值可作为operator()函数的参数传递(如由用户键盘输入,而非在operator()函数体内使用固定值100); ③for_each(iterator begin, iterator end, _Fn _Func)函数只支持3个参数,且第3个参数需传入

NewsomTech 1279

【C++】STL 算法 ⑩ ( 函数适配器 | 函数适配器概念 | 函数适配器分类 | 函数适配器辅助函数 | std::bind2nd 函数原型及示例 | std::bind 函数原型及示例 )

一、函数适配器简介 1、函数适配器概念 2、函数适配器分类 3、函数适配器辅助函数 二、函数适配器使用示例 - std::bind2nd 函数 1、std::bind2nd 函数原型 2、代码示例 - std::bind2nd 函数 三、函数适配器使用示例 - std::bind 函数 1、std::bind 函数原型 2、代码示例 - std::bind 函数

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2874

C++ STL仿函数适配器

0适配器

qq_41605114的博客 688

C++ STL 之 函数对象适配器

谓词是指普通函数或重载的 operator()返回值是 bool 类型的函数对象(仿函数)。如果operator 接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词,谓词可作为一个判断式。例如: struct myfuncobj01 {   bool operator(int v){} // 接受一个参数,并且返回值为 Bool 即一元谓词 } bool c...

weixin_30618985的博客 197

【C++笔记】容器适配器及deque和仿函数

哈喽,各位小伙伴大家好!上期我们讲了list结构剖析及其模拟实现。今天我们来讲一下dequeue和模版进阶。话不多说,我们进入正题!向大厂冲锋适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。容器适配器就像我们的电流适配器一样。容器适配器就是一种转化接口,把一种接口转化为我们需要的接口。priority_queue也是一个容器适配器.priority_queue也叫优先级队列。

大白的编程日记. 1630

c++ STL 仿函数和适配器(算法常用)

stl谓词理解,结合容器、算法、以及函数适配器的使用

hutaotaotao的博客 1592

C++ 仿函数和适配器

一、仿函数 现有一个vector,需要统计大于8的元素个数。 使用std::count_if,代码可能长这个样子。 bool greaterThan8(int n){ return n > 8; } int count = count_if(vec.begin(), vec.end(), greaterThan8); count_if第三个参数接收的是一个函数指针,并且这个函数指针只接收一个参数,返回值是bool。 count_if是将参数1和参数2之间的每一项都会作为参数去调用第三个参数,然后返

芒种、的博客 247
上一篇: C++必备常识
下一篇: QT的信号和槽机制
Evan_work
博客等级 码龄7年 142粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值