STL函数对象之预定义函数对象和函数对象绑定器

STL--函数对象 一元函数对象:接受一个参数并返回一个结果,适用于对单个元素进行操作。二元函数对象:接受两个参数并返回一个结果,适用于对两个元素进行操作。谓词:返回布尔值的一元函数对象,适用于条件判断。二元谓词:返回布尔值的二元函数对象,适用于比较两个元素。算术函数对象:提供基本的算术操作,适用于算术运算。比较函数对象:提供基本的比较操作,适用于比较运算。逻辑函数对象:提供基本的逻辑操作,适用于逻辑运算。绑定器:将二元函数对象的一个参数绑定到一个固定值,生成一个一元函数对象,适用于简化函数对象的使用。函数适配器。 阅读详情
STL为我们定义了一些常用的函数对象,如下表。

函数绑定器是函数对象,它能结合函数对象、于特定值或函数在一起使用。它们也是被定义在
<functional>. 看下面的例子:
find_if (coll.begin(),coll.end(), bind2nd (greater<int>(),42))。
这个例子bind2nd把greater<int>()于42结合起来用来检查大于42的值。
下面是STL为我们定义的函数绑定器:



为成员函数制定的函数对象:
为了在泛型算法中调用一个类的成员函数,STL为我们提供了这两个绑定器:



看这样一个例子:
#include <iostream>
#include <vector>
class Person {
private:
std::string name;
public:
void print() const {std::cout << name << std::endl;}
void printWithPrefix (std::string prefix) const {std::cout << prefix << name << std::endl;}
Person(std::string str):name(str){}
};

void foo (const std::vector<Person>& coll){
using std::for_each;
using std::bind2nd;
using std::mem_fun_ref;
//为每个元素调用print()函数。
for_each (coll.begin(), coll.end(),mem_fun_ref(&Person::print));

//为每个元素调用printWithPrefix()函数,”person”,是要传递的值。
for_each (coll.begin(), coll.end(),bind2nd (mem_fun_ref (&Person::printWithPrefix),"person: "));

主函数:
vector<Person> vec;
Person per1("panjie");
Person per2("xiaofang");
Person per3("xiaoxiao");
vec.push_back (per1);
vec.push_back (per2);
vec.push_back (per3);
foo(vec);

为普通函数准备的绑定器:
看这样一个例子:
bool check(int elem);
bool strcmp(param1,param2);
pos = find_if (coll.begin(), coll.end(), //rangenot1(ptr_fun(check)));
pos = find_if (coll.begin(), coll.end(), //range
bind2nd(ptr_fun(strcmp),""));

函数的绑定器用起来都很简单的,我们可以想想怎么实现它。
C++11绑定器bind及function机制 之前在学muduo网络库时,看到陈硕以基于对象编程的方式,大量使用boost库中的bind和function机制,如今,这些概念都已引入至C++11,包含在头文件中。本篇文章主要梳理C++绑定器相关的内容以及C++11中引入的functionbind1st、bind2nd、bind(C++11)。学完本篇内容,将对C++绑定器及function机制等的底层实现有深刻理解,那么我们开始说吧。本文通过C++11之前的bind1st和bind2nd。 阅读详情

相关推荐

C++11中引入的bind绑定器和function函数对象

施磊C++语言高级进阶课程,主要讲解绑定器、function函数对象、lambda表达式

GeniusAng的博客 905

C++(29)——bind绑定器和function函数对象

绑定器和函数对象 函数对象我们之前以及提到了,函数对象就是类方法中有operator()运算符重载的。在使用时和函数很类似。 绑定器 在C++ STL库中有两个绑定器 绑定器 + 二元函数对象 = 一元函数对象 bind1st: operator()的第一个形参变量绑定成一个确定的值。 bind2nd:operator()的第二个形参变量绑定成一个确定的值。 但是其实在复杂的应用场景下,这两个绑定器并不能满足应用的需求,于是在C++11中从Boost库中引入了bind绑定器和function函数对象机制

qq_44824574的博客 1799

Kali使用Metasploit内、外网渗透windows系统

Metasploit是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。当H.D. Moore在2003年发布Metasploit时,计算机安全状况也被永久性地改变了。 一、(内网渗透)内网英文缩写WAN;内网又称局域网 局域网的覆盖范围一般是方圆几千米之内,其具备的安装便捷、成本节约、扩展方便等特点使其在各类办公室内运用广泛。局域网可以实现文件管理、应用软件共享、打印机共享等功能,在使用过程当中,通过维护局域网网...

QQ670663的博客 2万+

【C++】STL 算法 ⑧ ( 预定义函数对象 | 预定义函数对象组成 | 预定义函数对象分类 | 预定义 算术运算符 函数对象 | 预定义 比较运算符 函数对象 | 预定义 逻辑运算符 函数对象 )

一、预定义函数对象 1、预定义函数对象概念 2、预定义函数对象组成 二、预定义函数对象分类 1、预定义 算术运算符 函数对象 2、预定义 比较运算符 函数对象 3、预定义 逻辑运算符 函数对象 三、代码示例 - plus 函数对象使用 1、plus 函数对象 2、代码示例 3、执行结果

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

从0到1:.NET 9 OpenAPI全攻略!Swagger vs Scalar UI谁更强?

OpenAPI:.NET 9的智能文档革命 本文深入解析.NET 9的OpenAPI支持,对比Swagger UI与Scalar UI的优劣,提供实战代码示例: 一键生成:AddOpenApi()+MapOpenApi()快速生成标准文档 UI工具对决: Swagger UI功能全面但复杂 Scalar UI简约现代,原生支持cURL/HTTPie 进阶技巧: XML注释增强文档可读性 自定义Transformer实现文档动态修改 🔥核心价值:.NET 9的OpenAPI方案显著降低API文档维护成本,开

java专栏 1427

DeepSeek提示词实战:从零到百的AI角色扮演指南(附100+场景模板)

本文提供了一份详尽的DeepSeek提示词实战指南,重点讲解AI角色扮演的核心技巧。通过“角色扮演四要素法”和五大核心场景模板,帮助用户从零开始掌握如何设计高质量提示词,有效提升AI输出的深度与精度,并附赠100+实用场景模板供参考。

weixin_29305337的博客 579

绑定器与函数对象

是一个通用的函数封装器,可以保存任何可调用对象(普通函数、成员函数、Lambda 表达式、绑定器)。线程池是一种常用的并发编程工具,用于管理和复用固定数量的线程,避免频繁创建和销毁线程带来的性能开销。以下是如何将类成员函数绑定为任务并添加到线程池。是 C++11 引入的工具,用于将函数或成员函数与特定的参数绑定,生成一个新的。实现线程池的完整示例及细致讲解,帮助更深入理解绑定器在实际项目中的应用。线程池的核心功能是管理线程,所以需要一个容器存储所有线程的句柄。上述实现中,线程的任务是固定的(

FHKHH的博客 1163

51单片机通过计时器实现倒计时

51单片机通过计时器操作两位8段阳极数码管,实现倒计时

一份耕耘,一分收获 3万+

浅谈C++绑定器bind1st、bind2nd和函数对象function

今天我们先来谈谈C++ 标准库里面的绑定器bind1stbind2nd和函数对象function。

icc_hhy的博客 1410

单细胞实战之数据净化三部曲:细胞周期校正、双胞体剔除与RNA污染清理——技术解析与实战指南

本文深入解析单细胞数据分析中至关重要的数据净化步骤,即细胞周期校正、双胞体剔除与RNA污染清理。通过实战代码演示与原理剖析,指导读者如何有效识别并去除技术噪音,从而获得更纯净、可靠的数据,为后续的细胞分群、差异表达等高级分析奠定坚实基础。

weixin_29274337的博客 204

零基础教你学RDMA驱动开发--第8篇:队列对(QP)、完成队列(CQ)与工作请求(WR)机制剖析

本文深入剖析了RDMA(远程直接内存访问)中的核心机制:队列对(QP)、完成队列(CQ)和工作请求(WR)。QP作为通信端点包含发送队列(SQ)和接收队列(RQ);WR是用户提交的操作指令,转换为工作队列元素(WQE)后由网卡异步执行;CQ则提供完成通知机制。文章详细介绍了三者的协作原理,包括QP状态机、WR提交方式、CQ轮询机制,以及关键的信号控制技术(Signaled Mode)来优化性能。同时对比了SEND/RECV和RDMA WRITE两种模式的差异,提供了调试技巧和最佳实践。这些机制共同构成了RD

amy_mhd的博客 156

详解bind绑定器和function函数对象机制

bind1st和bind2nd使用代码举例如下:自己动手实现bind1st和find_if:bind和function机制; 模板的完全特例化(全特化)和部分特例化(偏特化);区分一下函数类型和函数指针类型; 通过vector演示模板特例化的使用;自己动手实现function 理解原理;bind绑定器使用举例;muduo源码中的线程池用C++代码模拟;lambda表达式的原理和实践 ;通过lambda表达式实现有自定义优先级队列的比较方式;

C++开发 2038

OpenCV-Python实战(3)——OpenCV中绘制图形与文本

OpenCV 是一个的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。本文介绍了 OpenCV 提供的与绘制图形和文本相关的函数。在图形方面,我们了解了如何绘制基本图形(直线、矩形和圆形等)以及高级图形(剪裁线、箭头、椭圆和多边形)。在文本方面,我们了解了如何绘制文本以及 OpenCV 库中的所有可用字体。

盼小辉丶的博客 2万+

C++STL 预定义函数对象和函数适配器

预定义函数对象和函数适配器 预定义函数对象基本概念:标准模板库STL提前定义了很多预定义函数对象,#include <functional> 必须包含。 1使用预定义函数对象: void main() { plus<int> intAdd; int x = 10; int y = 20; int z = intAdd(x, y)...

weixin_30412013的博客 98

【FastDDS】Discovery ( 01-overview )

Fast DDS 提供了多种发现机制用于自动匹配数据写入器和读取器,包括简单发现(默认兼容RTPS标准)、静态发现(可跳过SEDP阶段)、集中式的发现服务器架构以及手动RTPS发现。发现过程分为参与者发现(PDP)和端点发现(EDP)两个阶段,PDP通过多播/单播公告确认参与者存在,EDP则匹配主题和数据类型相同的端点。系统支持配置发现协议、租约期限等通用参数,以及各机制特有设置如静态EDP XML配置、服务器定位器等。此外还支持通过监听器实现发现回调功能。

Ray Home 720

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

STL中绑定器的使用

使用STL的过程中,有时适当地使用绑定器,能够使得代码更简洁、更高效。谈到绑定器,就不得不说说函数对象(function object),或称为仿函数(functor)。C++中的函数对象是这样一种特殊的类型,它定义了操作符“()”,所以能够像函数调用一样在对象名后加上“()”,并传入对应的参数,从而执行相应的功能。这样的类型就是函数对象,STL中通常使用函数对象作为容器的排序规则并且在算法中

周曹俊的专栏 3004

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

巧用STL中的绑定器和函数对象嵌套调用实现优雅高效的代码

       前面在“STL中绑定器的使用”一文中已经初步阐述了使用STL中的绑定器和函数对象实现对序列容器中的数据进行排序或者查找的方法,使用此方法能够写出优雅高效的代码。本文在原先的基础上作进一步的延伸,通过一个实际问题的使用情景,介绍使用“绑定器和函数对象嵌套调用”的方法在最少代码的基础上实现高效的功能。       问题:有一组电池,需要对其根据各自的参数和指标信息进行

周曹俊的专栏 1307

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

bind绑定器和function函数对象

熟悉函数对象和绑定器的应用,并了解它们底层的原理。

m0_53441395的博客 860

STL —— 绑定器

绑定器是什么?为什么被提出?看以下代码了解绑定器的来源及作用. #include <iostream> #include <functional> #include <algorithm> #include <vector> using namespace std; int main() { int arr[] = {12,34,42,...

TUJI67的博客 661

STL 预定义函数对象和函数适配器

1.算术函数对象 预定义的函数对象支持加、减、乘、除、求余和取反。调用的操作符是与 type 相关联的实例 加法: plus<Types> 如:plus<string> stringAdd; sres = stringAdd(sva1,sva2); 减法: minus<Types> 乘法: multi...

qq_33185566的博客 227

【STL终极奥义❀解耦合思想的实现❀】函数对象、谓词与函数适配器——从for_each、transform、count_if、sort算法源码的角度分析

STL算法为我们提供了一些统一的算法模型,在这些算法模型中,只提供了一个统一的壳子,具体实现什么样的功能由我们通过函数对象或回调函数来实现。这是一种非常重要的思想,统一性思想,而统一的实现就是解耦合,如果不理解这个思想,那么学习STL就像背英语单词,将变得毫无意义。下面将通过for_each、transform、count_if、sort四个算法实例来一步步深入理解这种思想。

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 1362

C++绑定器和函数对象

用于存储C++中绑定器和函数对象相关的原理和代码,便于后续复习

qq_45041871的博客 545

C++11中bind绑定器和function函数对象

C++11中引入bind绑定器和function函数对象 一. bind1st和bind2nd 二. 模板的完全特例化和非完全特例化 三. function函数对象 四. bind和function实现线程池 五. lambda表达式

qq_41721746的博客 1311

C++11 函数对象、Lambda表达式 & 绑定器

C++ 绑定器&函数对象:bind、function、Lambda表达式

坚持学习 837

117-C++11中引入的bind绑定器和function函数对象

1、C++11中引入的bind绑定器和function函数对象 1.1、bind1st和bind2d使用 bind1st和bind2d是STL中的; bind1st和bind2d作用: 将二元函数对象的一个参数绑定,使其变为一元函数对象; 缺点: 只能用于二元函数对象。 函数对象: 对象拥有小括号重载函数的对象。 #include <functional> --包含c++库中的所有的函数对象 #include <algorithm> --包含了c++库中的所有

Edward_LF的博客 906
上一篇: STL函数对象2
下一篇: STL函数对象之自定义函数对象
FlowShell
博客等级 码龄17年 119粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值