快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

函数对象FunctionObject-创新互联

目录

四方台网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联公司从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

一.函数对象Function Object的原理

二.使用函数对象的意义

三.实现一个函数对象Function Object完成容器元素的过滤

四.查找函数find()和find_if()的区别:


一.函数对象Function Bbject的原理

1.函数对象即为一个重载了括号 " ( ) " 的对象。当该对象调用此操作符时,其表现形式就如同普通函数的调用一般。

2.具体实现:

①.函数对象的定义:

class Fuction_object
{
public:
	bool operator() (int _value)
	{
		return val< _value;
	};
private:
	int val;
};

②.函数对象的调用:通过定义的类创建函数对象,再以一般函数调用的方式调用该函数对象

Function_object F_O(10);
F_O(5);
二.使用函数对象的意义

1.函数对象拥有自己的状态。程序员可以在类中定义状态变量,这样的一个函数对象在多次的调用中可以共享状态。(函数调用不存在这种优势)

2.函数对象有自己特有的类型,而普通函数无类型一说。(通过此特性,在使用STL中的函数时,可以传递相应的类型作为参数来实例化相应的模板,从而实现相应的功能)

eg:

class Fuction_object
{
public:
	bool operator() (int _value)
	{
		return val< _value;
	};
private:
	int val;
};

int main()
{
Function_object F_O(10);
F_O(5);

int a[5] = {10,2,4,5,9};
vectorvec(a,a+5);

vector::iterator it = vec.begin();

int counts = 0;
while(find_if(it,vec.end(),F_0)!=vec.end()) 
{
  counts++;
  it++;
};

system("pause");
return 0;
}

通过函数对象作为中函数sort()的参数完成对容器中元素的过滤。

三.实现一个函数对象Function Object完成容器元素的过滤

C++实现代码:

//function_object.h

#pragma once

#ifndef _FUNCTION_OBJECT_H_
#define _FUNCTION_OBJECT_H_

class LessThan
{
private:
	int _val;
public:
	LessThan(int val) :_val(val) { }
	int comp_val1() const { return _val; }
	void comp_val2(int nval) { _val = nval; }

	bool operator() (int _value) const; //实现函数对象的根本
};


#endif


//function_object.cpp

#include"function_object.h"

bool LessThan::operator()(int _value)const
{
	return _value< _val; // _val是创建函数对象时就设定好的一个右操作数,而_value则是调用函数对象时传入的左操作数
}

//main.cpp

#include"function_object.h"
#include //find_if()
#include#includeusing namespace std;


int count_less_than(const vector& vec, int comp)
{
	LessThan lt(comp); //创建函数对象function object

	int counts = 0;

	for (int ix = 0; ix< vec.size(); ix++)
	{
		if (lt(vec[ix]))
		{
			counts++;
		}
	}

	return counts;
}

void print_less_than(const vector& vec, int comp)
{
	LessThan lt(comp);

	vector::const_iterator it = vec.begin();

	cout<< "element less than "<< lt.comp_val1()<< endl;
	while (it != vec.end())
	{
		if ((it = find_if(it, vec.end(), lt)) != vec.end())
		{
			cout<< *it<< " ";
			it++;
		}
	}
}

int main()
{
	int ia[10] = { 17,12,44,27,55,8,23,9,6,14 };
	vectorvec(ia, ia + 10);
	int comp_val = 20;

	cout<< "Number of elements less than "
		<< comp_val<< " are "
		<< count_less_than(vec, comp_val)<< endl;

	print_less_than(vec, comp_val);

	system("pause");
	return 0;
}

_val是创建函数对象时就设定好的一个右操作数,而_value则是调用函数对象时传入的左操作数

bool LessThan::operator()(int _value)const
{
	return _value< _val; 
// _val是创建函数对象时就设定好的一个右操作数,而_value则是调用函数对象时传入的左操作数
}
四.头文件中的查找函数find()和find_if()的区别:

1.find查找函数原型为find(_InIt _First, const _InIt _Last, const  _Ty& _Val)

其中

first 为迭代器起始位置

last为迭代器起始位置

val为查找数据

2.find_if查找函数原型为find_if(_InIt _First, const _InIt _Last, _Pr _Pred)

其中

first 为迭代器起始位置

last为迭代器起始位置

Pr _Pred是谓词,需要自己创建(函数对象经常用于此处)

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页名称:函数对象FunctionObject-创新互联
网址分享:http://6mz.cn/article/desphd.html

其他资讯