zoukankan      html  css  js  c++  java
  • STL

    Predicate是一种特殊的辅助函数,它会返回Boolean,常常被用来作为排序或者查找准则。

    Predicate会有1个或者2个操作数。

    Unary Predicate(单参判断式)

    例子:

    我们先写一个算法,如下:

    MathUtil.h

    #ifndef _Math_Util_H_
    #define _Math_Util_H_
    
    using namespace std;
    
    class MathUtil
    {
    public:
        static bool isPrime(int number);
    };
    
    #endif

    MathUtil.cpp

    #include <string>
    #include "MathUtil.h"
    
    bool MathUtil::isPrime(int number)
    {
        // ignore negative sign
        number = abs(number);
    
        // 0 and 1 are no prime numbers
        if (number == 0 || number == 1) {
            return false;
        }
    
        // find divisor that divides without a remainder
        int divisor;
        for (divisor = number / 2; number%divisor != 0; --divisor) {
            ;
        }
    
        // if no divisor greater than 1 is found, it is a prime number
        return divisor == 1;
    }


    测试代码

    PredicateTest.cpp

    #include <list>
    #include <algorithm>
    #include <iostream>
    #include "../../Algorithm/MathUtil.h"
    #include "PredicateTest.h"
    
    using namespace std;
    
    void PredicateTest::unaryPredicate()
    {
        list<int> coll;
        int startNumber, endNumber;
    
        cout << "Input Start Number: " << endl;
        cin >> startNumber;
        cout << "Input End Number: " << endl;
        cin >> endNumber;
    
        // insert elements from start number to end number
        for (int i = startNumber; i <= endNumber; ++i) {
            coll.push_back(i);
        }
    
        // search for prime number
        auto pos = find_if(coll.cbegin(), coll.cend(),  // range
            MathUtil::isPrime);                    // predicate
        if (pos != coll.end()) {
            // found
            cout << *pos << " is first prime number found" << endl;
        }
        else {
            // not found
            cout << "no prime number found" << endl;
        }
    }
    
    void PredicateTest::run()
    {
        printStart("unaryPredicate()");
        unaryPredicate();
        printEnd("unaryPredicate()");
    }

    运行结果:

    ---------------- unaryPredicate(): Run Start ----------------
    Input Start Number:
    30
    Input End Number:
    50
    31 is first prime number found
    ---------------- unaryPredicate(): Run End ----------------

  • 相关阅读:
    手写一个springboot的自动配置
    linux常用命令
    设计模式之模板模式
    设计模式之策略模式
    阿里云Ubuntu18.04下安装MySQL
    阿里云安装redis以及客户端的使用
    layui 复选框 使用 及jq基本方法
    layui 下拉框 实用
    ztree插件基础用法
    面试中常用排序算法实现(Java)
  • 原文地址:https://www.cnblogs.com/davidgu/p/4815431.html
Copyright © 2011-2022 走看看