首页 > 其他分享 >函数对象

函数对象

时间:2024-02-21 21:35:09浏览次数:18  
标签:end 函数 对象 bool template 谓词

函数对象

1.什么是函数对象

​ 1.类中重载了(),这个类实例化的对象叫函数对象(仿函数);

​ 2.一元仿函数是operator()中只需要一个参数。二元仿函数是operator()中需要二个参数

2.有什么用

​ 1.做为算法的策略

void test()
{
	vector<int> v;
	v.push_back(8);
	v.push_back(1);
	v.push_back(6);
	v.push_back(3);
	v.push_back(7);

	//内建函数对象(仿函数)
	sort(v.begin(), v.end(), greater<int>());

	for_each(v.begin(), v.end(), [](int val){cout << val << " "; });
	//[](int val){cout << val << " "; }//匿名函数


}

3.函数对象和普通函数的区别

​ 1.函数对象可以有自己的状态

​ 2.普通函数没有类型,函数对象有类型

​ 3.函数对象比普通函数执行效率有可能更高(成员函数自动申请为内联函数)

4.谓词

​ 1.谓词是指普通函数或重载的operator()返回值是bool类型的函数对象(仿函数)。

​ 2.谓词可以作为一个判断式

​ 3.接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词

struct GreaterThanFive{
	bool operator()(int v){
		return v >5;
	}
};

//一元谓词
void test01(){
	
	vector<int> v;
	for(int i =0; i <10;i++){
		v.push_back(i);
	}

	vector<int>::iterator ret = find_if(v.begin(), v.end(), GreaterThanFive());
	if(ret == v.end()){
		cout <<"没有找到!"<< endl;
	}
	else{
		cout <<"找到:"<<*ret << endl;
	}

}

//二元谓词
struct MyCompare{
	bool operator()(int v1,int v2){
		return v1 > v2;
	}
};

void test02(){

	vector<int> v;
	srand((unsignedint)time(NULL));
	for(int i =0; i <10; i++){
		v.push_back(rand()%100);
	}

	for(vector<int>::iterator it = v.begin(); it != v.end(); it ++){
		cout <<*it <<" ";
	}
	cout << endl;
	//排序算法
	sort(v.begin(), v.end(), MyCompare());

	for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
		cout <<*it <<" ";
	}
	cout << endl;
}

5.内建函数对象

​ 1.使用内建的函数对象要加入头文件#include

/*
template<class T> bool equal_to<T>//等于
template<class T> bool not_equal_to<T>//不等于
template<class T> bool greater<T>//大于
template<class T> bool greater_equal<T>//大于等于
template<class T> bool less<T>//小于
template<class T> bool less_equal<T>//小于等于
*/

void test01(){

	equal_to<int> MyEqual;
	if(MyEqual(10,20)){
		cout <<"相等!"<< endl;
	}
	else{
		cout <<"不相等!"<< endl;
	}

标签:end,函数,对象,bool,template,谓词
From: https://www.cnblogs.com/wbcde116/p/18026245

相关文章

  • Kotlin的主构造函数
    主构造函数没有函数体,如果想在主构造函数中写一些逻辑,Kotlin提供了一个init结构体,所有主构造函数中的逻辑都可以写在里面:classStudent(valsno:String,valgrade:Int):Person(){init{println("snois$sno")println("gradeis$grade")}}......
  • 构造函数和原型
    1.1对象的三种创建方式字面量方式varobj={}; 2.new关键字varobj=newObject();3.构造函数方式functionPerson(name,age){this.name=name;this.age=age;}varobj=newPerson('zs',12);构造函数是一个特殊的函数,用来初始化对象,为对象成员变量......
  • C++ 第一节课 名字空间 ,输入输出函数,和 C 语言的区别
    #include<iostream>//#include头文件,C++标准库的头文件都不带.h(.h是C库头文件添加的)#include<cstdio>#include<cstring>usingnamespacestd;//namespace命名空间为了防止变量名字冲突//命名空间中定义自己的变量或函数或类,都是独立的//所有的命名空......
  • 【C++】编写一个具有老式风格接口的函数,其原型如下:int reduce(long arr[], int n)。实
    #include<iostream>#include<string>usingnamespacestd;intreduce(longarr[],intn){sort(arr,arr+n);autostr=unique(arr,arr+n);returnstr-arr;}intmain(){longarr[10]={15,8,5,6,11,11,6,6,198,50};......
  • c++类开发的第三篇(讲明白友元函数和this指针)
    friend_function成员变量和函数的存储c++实现了封装,数据和处理数据的操作(函数)是分开存储的。c++中的非静态数据成员直接内含在类对象中,就像c语言的struct一样。成员函数并不会出现在对象中,而是作为类的一部分存储在代码段中,需要通过对象或对象指针进行调用。成员函数可......
  • golang之函数
    目录一、什么是函数二、函数的定义三、函数的返回值1.多个返回值2.命名返回值四、函数的参数1.可变长参数一、什么是函数简单来说就是一个特定的方法,通过这个方法产生预期的结果。函数是一块执行特定任务的代码。一个函数是在输入源基础上,通过执行一系列的算法,生成预期的输......
  • 承前启后,Java对象内存布局和对象头
    承前启后,Java对象内存布局和对象头大家好,我是小高先生。在我之前的一篇文章《并发编程防御装-锁(基础版)》中,我简要介绍了锁的基础知识,并解释了为什么Java中的任何对象都可以作为锁。在那里,我提到了对象头中有一个指向ObjectMonitor的指针,但没有深入探讨Java对象的内存结构。本文将......
  • 验证对象和map赋值一样,多个方法赋值,只要中间没有重新new对象,值就会一直存在
    packageservice;importbase.BaseSpringTest;importcom.bestpay.settle.unity.certify.integration.model.CertifyInfoBO;importlombok.extern.log4j.Log4j2;importorg.junit.Test;importjava.util.HashMap;importjava.util.Map;/***场景测试类**@authorzhangkuankuan......
  • C++限制函数最大执行时间
    背景C++调用某些硬件操作(如TPU推理)可能存在超时风险,需要限制函数的执行时间。思考异步执行免不了开线程,如何限制join的最大时间是关键。设计如下函数:boolInfer(uinttimeout_ms)根据输入的timeout_ms参数,按时完成返回true超时返回false。实现使用std::mutex配合std::con......
  • 面向对象编程
    1.对象面向对象与面向过程1)两者都是一种编程思想2)面向对象强调的是事情的结果,我们通过对象完成对应的功能3)面向过程强调的是事情的过程,我们做任何事情,都要亲力亲为,经过每一个过程4)Java是一门面向对象的语言类与对象1)定义类通过关键字class来定义,类是一类事物的抽......