郴州本地网站建设免费模式营销案例
_Pred 谓词
很多算法使用函数对象来指定要进行的二元运算,或者指定谓词来确定进行特定运算。谓词是一个返回bool类型的值的函数,因为函数对象是一种类型的对象,实现operator()()成员函数并返回bool类型的值,所以函数对象也是谓词。
谓词(返回bool类型的仿函数)
经过代码验证发现谓词不止用仿函数(函数对象)来定义,用普通函数类型定义就行,主要是返回bool类型
代码验证
#include <iostream>
#include<vector>
#include<algorithm>//算法 头文件using namespace std;
//统计内置数据类型
//class Greater20//仿函数
//{
// public:
// bool operator()(int val){
// return val>20;
// }
//};
bool Greater20(int val){return val>20;
}
void test01(){vector<int>v;v.push_back(10);v.push_back(40);v.push_back(30);v.push_back(20);v.push_back(40);v.push_back(20);int num=count_if(v.begin(),v.end(),Greater20);//谓词
}
int main()
{test01();
// test02();system("pause");
}
两种结果相同
很多算法使用函数对象来指定要进行的二元运算,或者指定谓词来确定进行特定运算。谓词是一个返回bool类型的值的函数,
因为函数对象是一种类型的对象,实现operator()()成员函数并返回bool类型的值,所以函数对象也是谓词。
所以关系应该是谓词包括普通函数和仿函数
再附带一个代码for_each的普通函数和仿函数
#include <iostream>
#include<vector>
#include<algorithm>//算法
using namespace std;
//常用遍历算法 for_each//普通函数
void print01(int val){cout<<val<<" ";
} //仿函数
class print02{public:void operator()(int val){cout<<val<<" ";}
};
void test01(){vector<int>v; for(int i=0;i<10;i++){v.push_back(i);}for_each(v.begin(),v.end(),print01);//始 末 函数名称 [这里传递的是函数指针(放函数名),不是仿函数,所以不加括号]//创建仿函数因为重载了(),所以要加()cout<<endl;for_each(v.begin(),v.end(),print02());//函数对象 cout<<endl;
}
int main()
{test01();system("pause");
}