函数对象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://scyanting.com/article/desphd.html