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 ----------------

  • 相关阅读:
    [转][黄忠成]Object Builder Application Block (1)
    C#.NET里面抽象类和接口有什么区别
    MVC中AOP思想的体现(四种过滤器)并结合项目案例说明过滤器的实际用法
    NHibernate之(24):探索NHibernate二级缓存(下)
    使用 ES (elasticsearch) 搜索中文
    elasticsearch 中文 term & completion suggester
    uwsgs loading shared libraries: libicui18n.so.58 异常处理
    tensorflow with gpu 环境配置
    Java 多线程执行
    SpringBoot log4j2 异常
  • 原文地址:https://www.cnblogs.com/davidgu/p/4815431.html
Copyright © 2011-2022 走看看