C++ 函数对象(仿函数)

番茄(西红柿)叶片病害检测数据集:12k+图像,10类,yolo标注 本文介绍了包含12,250张图像的番茄叶片病害检测数据集,涵盖10种常见病害类型及健康叶片,采用YOLO格式标注。数据集具有三大核心价值:科研层面填补病害样本空白,推动算法创新;产业应用支持精准诊断、早期预警,降低损失20-40%;社会生态方面减少农药使用15-30%,助力绿色农业。该数据集作为AI与农业结合的数字基础设施,适用于计算机视觉项目、科研实验等场景。 阅读详情

函数对象

概念:模仿函数的类,使用方式如同函数

本质:函数对象是一个类,类中对小括号“()”进行了函数重载。

仿函数主要用于STL中的算法中,函数指针虽然也可以作为算法的参数,但它不能满足STL对抽象性的要求,也不能满足软件积木的要求–函数指针无法和STL其他组件搭配,产生更灵活变化。

案例代码如下:

#include <iostream>
using namespace std;
 
class MyAdd
{
public:
    int operator()(int v1,int v2)
    {
        return v1 + v2;
    }
};

void test01()
{
    MyAdd myAdd;
    cout <<  myAdd(10, 10) <<endl;
}

 
int main()
{
    test01();
    return 0;
}

STL的案例

C++ STL的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。

set结构底层实现为红黑树结构,查找相较于其它数据结构较快。现介绍一个运用到仿函数的案例如下:

题目:定义一个Student结构体,包括name和age等数据,要求编程实现在set中查找一个元素的操作。

分析:因为插入的类型是自定义的,不是基本类型(基本类型有默认的排序准则),因此要指定生产红黑树结构的比较算法。目前有两种方法供大家参考,案例如下。

方法一:重载 < 运算符

#include <iostream>
#include <set>
using namespace std;

struct Student {
    string name;
    int age;

    bool operator <(const Student & a)const 
    {
        if(name < a.name)
        {
            return true;
        }
        else if(name == a.name)
        {
            if(age < a.age)
                return true;
            else
                return false;
        }
        else
            return false;
    }
};

int main()
{
    set<Student> stuSet;
 
    Student stu1, stu2;
    stu1.name = "test1";
    stu1.age = 13;
 
    stu2.name = "test1";
    stu2.age = 23;
 
    stuSet.insert(stu1);
    stuSet.insert(stu2);

    Student stuTemp;
    stuTemp.name = "test1";
    stuTemp.age = 13;
 
    set<Student>::iterator iter;
    iter = stuSet.find(stuTemp);
    if(iter != stuSet.end())
	{
        cout << iter->name << endl;
    }
	else
	{
        cout << "Cannot find this student!" << endl;
    }
 
    return 0;
}

方法二:仿函数重载()

#include <iostream>
#include <set>
using namespace std;
 
/*Student结构体*/
struct Student {
    string name;
    int age;
};
 
/*“仿函数"。为Student set指定排序准则*/
class studentSortCriterion {
    public:
        bool operator() (const Student &a, const Student &b) const {
            /*先比较名字;若名字相同,则比较年龄。小的返回true*/
            if(a.name < b.name)
	    {
                return true;
	    }
            else if(a.name == b.name)
	    {
                if(a.age < b.age)
                    return true;
                else
                    return false;
            }
	    else
                return false;
        }
};
 
int main()
{
    set<Student, studentSortCriterion> stuSet;
 
    Student stu1, stu2;
    stu1.name = "test1";
    stu1.age = 13;

    stu2.name = "test2";
    stu2.age = 23;
 
    stuSet.insert(stu1);
    stuSet.insert(stu2);
 
    /*构造一个测试的Student,可以看到,即使stuTemp与stu1实际上并不是同一个对象,
     *但当在set中查找时,仍会查找成功。这是因为已定义的studentSortCriterion的缘故。
     */
    Student stuTemp;
    stuTemp.name = "test1";
    stuTemp.age = 13;
 
    set<Student, studentSortCriterion>::iterator iter;
    iter = stuSet.find(stuTemp);
    if(iter != stuSet.end())
    {
        cout << iter->name << endl;
    }
    else
    {
        cout << "Cannot find this student!" << endl;
    }
 
    return 0;
}

 

 

uniapp | 基于高德地图实现位置选择功能(安卓端) 在uni-app项目中实现地图位置选择功能的解决方案。由于uni.chooseLocation功能受限,采用高德地图API自主开发。系统由父组件poiMap.vue(负责展示和跳转)和子组件poiBox.vue(核心地图逻辑)构成,通过父子组件通信传递位置数据。关键技术包括:1)使用AMapLoader动态加载地图SDK;2)集成PositionPicker实现拖拽选点;3)异步加载AMapUI插件;4)通过事件监听获取位置详情(地址/经纬度)。 阅读详情

相关推荐

revit二次开发环境搭建(2024版)(小白友好)

revit二次开发环境配置,SDK、addin manager和lookup新手友好安装教程

m0_56961251的博客 1419

C++仿函数(函数对象)

重载函数调用操作符的类,其对象称为函数对象;函数对象使用重载的()时,行为类似函数调用,故称为仿函数。

m0_72128260的博客 414

【Labview与SQL Server互联(labview可以引用数据库)】

Labview与SQL Server互联

Magize的博客 3585

C++ STL set::find的用法

上次面阿里巴巴。面试官问了我这样一个问题,“C++ STL中的set是如何实现的”。当时只答了二叉树,回来查下书,原来一般是红黑树,后悔没好好记住啊。。。 接着,面试官又考了我一道这样的编程题:定义一个Student结构体,包括name和age等数据,要求编程实习在set中查找一个name == "张三", age == 13的操作。 本来set自己用得不多,当时一下懵了。回来查阅《C++标准...

huobengle 943

深度探索:非线性随机森林(Nonlinear Random Forest,NL-RF)原理及应用

非线性随机森林(NL-RF)旨在通过结合集成方法与高级技术来捕捉和建模数据中的非线性关系,从而改善传统随机森林在处理复杂非线性数据结构时的表现。

qq_51320133的博客 2064

Jetson nano 系列之2—板载摄像头IMX219启动

我选用的是亚博科技jetson nano的开发板。

驽马十驾,功在不舍;锲而不舍,金石可镂。 4273

C++STL函数对象/仿函数(详细详细)

STL内建了一些函数对象。

qq_62855390的博客 2279

【目标跟踪】基于Kalman滤波实现无人机运动轨迹跟踪附matlab代码

1 简介 在近代控制中,需要对某一特定的运动目标进行跟踪监测,并需要对其下一时间的运动位置,运动方向,速度等信息进行预先估算,才能达到对目标的即时控制.本文简要讨论了用卡尔曼滤波算法对单个目标航迹进行预测,并借助于Matlab仿真工具,对实验的效果进行评估. 2 部分代码 clc; close all; %initial state xo=25; vox=2; %Observations **** % X-Direction Calcula

qq_59747472的博客 4731

C++——仿函数(函数对象,函数符)

函数符,函数对象,函数适配器的概念和一些基本使用方法

JAN6055的博客 1474

6.3 节深度拆解:Hermes Agent 多 Agent 协同执行链路的 4 层设计逻辑

拆解 Hermes 多 Agent 协同的 4 层工程化设计(协议层、编排层、执行层、适配层),聚焦协议层的强约束消息 Schema 如何解决 Agent 间语义不一致问题,并提供 `soul.md` 配置、GLM-4.7Flash 结构化输出验证及 v0.13.0/v0.14.0 版本实操避坑指南

weixin_42520239的博客 122

推荐系统(十六):基于ESMM的商品召回/推荐系统

ESMM(Entire Space Multi-Task Model)是阿里巴巴提出的多任务学习框架,通过联合建模点击率(CTR)和点击转化率(CVR)解决传统CVR模型样本稀疏问题。其核心思想是将 CVR 定义为 CTR 与 CTCVR 的条件概率,模型包含两个子任务。

Jin_Kwok的博客 1265

C++仿函数/函数对象

#什么是仿函数/函数对象 函数对象又叫仿函数 先看看是如何定义仿函数的 在这里插入代码片 // 先定义好类模板 template<typename T> class Function { public: // 重载()实现比较两个数的大小 bool operator()(const T& data1, const T& data2) { ret = data1 ...

wjysg8408982的博客 268

FPGA原型验证(七):如何选择、搭建原型验证平台?

本篇概要::讨论了在项目初期选择目标FPGA平台的重要性,包括自制板卡与购买现成板卡之间的决策。主要是为那些希望建立基于FPGA的原型平台的工程师和设计师提供了深入的技术细节和决策指导,无论是选择自制还是购买现成的解决方案。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 942

C++ 仿函数详解:让对象像函数一样调用

特性普通函数Lambda仿函数是否可存储状态❌ 否⚠️ 仅限闭包捕获✅ 是是否可复用✅ 是❌ 否(仅局部作用域)✅ 是性能优化⚠️ 可能无法内联✅ 内联优化✅ 内联优化适用场景一般计算简单的一次性逻辑STL、回调、复杂逻辑什么时候选择仿函数?需要存储状态(例如计数器)。需要复用(多个地方使用相同逻辑)。需要STL 兼容性(如需要高效优化(内联)。仿函数是 C++ 语言中的重要概念,它使得对象可以像函数一样调用,并在 STL 算法、回调、状态存储等场景中发挥重要作用。

2302_79376097的博客 3459

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++函数对象与仿函数

C++ STL 函数对象与仿函数

Lao_tan的博客 1078

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【C++函数对象和仿函数】

C++是一种强大的编程语言,支持面向对象编程和泛型编程。函数对象和仿函数是C++中的重要概念,它们提供了一种灵活的方法来封装和使用函数,并在实际项目中发挥重要作用。

武帝为此的博客 410

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ 内建函数对象:算术仿函数、关系仿函数、逻辑仿函数总结

使用内建的关系仿函数可以简化我们编写排序的比较方法,直接调用关系仿函数即可。这些仿函数所产生的对象,用法和一般函数完全相同。使用内建函数对象,需要引入头文件。是一元运算,其他都是二元运算。STL内建了一些函数对象。

basketball616的博客 335

C++仿函数对象

/* 函数对象 重载函数调用操作符的类,气对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质 函数对象(仿函数)是一个类,不是一个函数 特点 1.函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返回值 2.函数对象超出普通函数的概念,函数对象可以有自己的状态(类具有自己的属性) 3.函数对象可以作为参数传递 */ class MyAdd { pu...

qq_18127085的博客 153

c++函数对象、仿函数

重载调用操作符()的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。又称仿函数。 简单举例 #include &lt;iostream&gt; class Cmp{ public: bool operator ()(int x,int y){ return x&gt;y; } }; int main(){ C...

Think88666的博客 726

C++系列-函数对象/仿函数

函数对象/仿函数

weixin_48668114的博客 975

C++ 中的函数对象(仿函数)

概念: 重载了函数调用操作符的类,其对象称为函数对象。 函数对象使用重载的()时,行为类似函数调用,也叫仿函数。 本质: 函数对象(仿函数)是一个类,不是函数。 使用: 函数对象在使用时,可以像普通函数那样调用,可以有参数和返回值。 #include<iostream> using namespace std; class MyAdd { public: int o...

万里归来少年心 389

深入探索C++ STL中的仿函数和函数对象

STL提供了许多预定义的仿函数,这些仿函数可以直接用于算法操作。在内建函数对象.cpp函数对象和仿函数是C++中非常强大的工具。通过重载operator(),我们可以让类像函数一样工作,同时还能维护状态。STL中的预定义仿函数则提供了丰富的功能,可以直接用于算法操作。无论是自定义函数对象还是一元/二元谓词,它们都能极大地提升代码的灵活性和可维护性。在实际开发中,合理使用函数对象和仿函数可以让我们写出更优雅、更高效的代码。希望本文能帮助你更好地理解和应用这些强大的C++特性。

qq_57063846的博客 531

C++不得不了解的知识 函数对象(仿函数)

函数对象基本使用 小刘:乔哥没在啊,还想问问他什么是仿函数呢? 宇哥:他呀,就他讲的那些东西,谁能听懂,讲的好烂。。 小刘:也是,要不咋俩讨论讨论? 宇哥:也行,咋俩这水平比那秃子可高多了。 小刘:函数对象是个对象(类),怎么又有函数,蒙了? 宇哥:不冲突,因为它又叫仿函数,即类实现了函数的功能 小刘:哦,原来是这样。那内部咋实现的呢? 宇哥:其实就是类里面重载了括号。 小刘:这个...

qq_44620773的博客 258

C++算法——函数对象\谓词\内置仿函数

C++的函数对象是一个类的实例,其可以像函数一样被调用,并且可以保存状态。函数对象重载了()运算符,允许其被当做函数来调用。

Three_stones的博客 1187

C++中仿函数/函数对象,函数指针的用法

研究这个起因是这样的,就是今天在用priority_queue的时候,需要自定义比较函数,但是此时又不能修改需要比较的类的内容(即不能用重载<的方法),所以只能写在外面,但是发现这样并不能编译通过。报的错叫cmp(我写的那个比较函数)不是类型名。后来查了下资料发现,这个需要用比较类去完成,比较类需要重载()方法,所以这个事情就非常引起我的好奇,想要知道一下,为什么sort这样的函数就可以直接用函数名

haolexiao的专栏 2983

C++ STL(十):函数对象/仿函数(函数对象、谓词、内建函数对象)

文章目录

NewsomTech 684
上一篇: iptables实现负载均衡
下一篇: 实时流媒体服务器搭建试验(nginx+rtmp)
码农诗人
博客等级 码龄11年 986粉丝 84原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值