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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
STL为我们定义了一些常用的函数对象,如下表。

函数绑定器是函数对象,它能结合函数对象、于特定值或函数在一起使用。它们也是被定义在
<functional>. 看下面的例子:
find_if (coll.begin(),coll.end(), bind2nd (greater<int>(),42))
这个例子bind2ndgreater<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),""));

函数的绑定器用起来都很简单的,我们可以想想怎么实现它。
STL--函数对象 一元函数对象:接受一个参数并返回一个结果,适用于对单个元素进行操作。二元函数对象:接受两个参数并返回一个结果,适用于对两个元素进行操作。谓词:返回布尔值的一元函数对象,适用于条件判断。二元谓词:返回布尔值的二元函数对象,适用于比较两个元素。算术函数对象:提供基本的算术操作,适用于算术运算。比较函数对象:提供基本的比较操作,适用于比较运算。逻辑函数对象:提供基本的逻辑操作,适用于逻辑运算。绑定器:将二元函数对象的一个参数绑定到一个固定值,生成一个一元函数对象,适用于简化函数对象的使用。函数适配器。 阅读详情

相关推荐

C++11绑定器bind及function机制

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

虚幻私塾 2533

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

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

qq_44824574的博客 1795

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

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

GeniusAng的博客 895

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

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

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

绑定器函数对象

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

FHKHH的博客 1159

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

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

icc_hhy的博客 1405

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

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

C++开发 2033

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

STL绑定器的使用

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

周曹俊的专栏 3002

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

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

周曹俊的专栏 1304

bind绑定器function函数对象

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

m0_53441395的博客 857

STL —— 绑定器

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

TUJI67的博客 660

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四个算法实例来一步步深入理解这种思想。

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

C++绑定器函数对象

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

qq_45041871的博客 545

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

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

qq_41721746的博客 1309

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

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

坚持学习 830

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

1、C++11中引入的bind绑定器function函数对象 1.1、bind1stbind2d使用 bind1stbind2d是STL中的; bind1stbind2d作用: 将二元函数对象的一个参数绑定,使其变为一元函数对象; 缺点: 只能用于二元函数对象函数对象对象拥有小括号重载函数对象。 #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、付费专栏及课程。

余额充值