// 谓词
// gt 大于， ge 大于等于
// lt 小于， le 小于等于
// eq 等于， ne 小于等于
#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

class GTFive // 一元谓词
{
public:
    bool operator()(int n)
    {
        return n > 5;
    }
};

class GT // 二元谓词
{
public:
    bool operator()(const int &n1, const int &n2)
    {
        return n1 > n2;
    }
};

void printGTF(GTFive gtf, int *p, int size)
{
    for (int i = 0; i < size; i++)
    {
        if (gtf(p[i]))
            cout << p[i] << " ";
    }
    cout << endl;
}

void print(int *p, int size, GT gt, int n)
{
    for (int i = 0; i < size; i++)
    {
        if (gt(p[i], n))
            cout << p[i] << " ";
    }
    cout << endl;
}

int main()
{
    int ms[] = {1, 2, 4, 7, 9, 20};
    cout << "大于 5 的元素" << endl;
    printGTF(GTFive(), ms, 6);

    cout << "大于 7 的元素" << endl;
    print(ms, 6, GT(), 7);

    return 0;
}
