c++谓词
- 游戏开发
- 2026-07-31 10:30:01
_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"); }