doc/docs/CPlusPlus-main/31_C++的谓词.md
sairate fa9377e4ae docs(book): 添加现代 C++教程及相关代码
- 新增现代 C++ 教程的 Preface 章节,包括英文和中文版本
- 添加 C++ Primer 练习代码
- 新增 Learn C++ 教程的 C++ 开发简介章节
- 添加头文件解析文档
- 更新 mkdocs.yml,包含新教程的目录结构
- 修改项目设置,使用 Python 3.10环境
2025-07-08 09:52:45 +08:00

2.1 KiB
Raw Blame History

C++的谓词

1. 简介

① 返回bool类型的仿函数称为谓词。

② 如果operator()接受一个参数,那么叫做一元谓词。

③ 如果operator()接受两个参数,那么叫做二元谓词。

2. 一元谓词

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

//仿函数 返回值类型是bool数据类型称为谓词
//一元谓词
class GreaterFive
{
public:
    bool operator()(int val)
    {
        return val > 5;
    }
};

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

    //查找容器中有没有大于5的数字
    //GreaterFive() 匿名函数对象
    vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
    if (it == v.end())
    {
        cout << "未找到" << endl;
    }
    else
    {
        cout << "找到大于5的数字为" << *it << endl;
    }
}

int main() 
{
    test01();
    
    system("pause");

    return 0;
}

运行结果:

  • 找到大于5的数字为6
  • 请按任意键继续. . .

3. 二元谓词

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

//仿函数 返回值类型是bool数据类型称为谓词
//二元谓词
class MyCompare
{
public:
    bool operator()(int val1,int val2)
    {
        return val1 > val2;
    }
};

void test01()
{
    vector<int>v;
    v.push_back(10);
    v.push_back(40);
    v.push_back(50);
    v.push_back(20);
    v.push_back(30);

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

    //使用函数对象改变算法策略变为排序规则为从大到小
    sort(v.begin(), v.end(), MyCompare());  //MyCompare()为函数对象是匿名函数

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

int main() {

    test01();

    system("pause");
    
    return 0;

}

运行结果:

  • 10 20 30 40 50
  • ----
  • 50 40 30 20 10
  • 请按任意键继续. . .