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

  • 相关阅读:
    ubuntu14.04安装chromium以及flash插件
    linux fuser的使用
    对max_allowed_packet这个参数的误解
    Linux hostname主机名配置文件与文件 /etc/hosts解析(copy来的,原作者看到了别打我)
    三个参数,对mysql存储限制的影响
    唉,没来这里好久了,也意味着我这一年多来没干什么正事儿,是回归的时候了!(简单谈谈爬虫的解析器)
    STM32 宏定义翻转端口
    ascii码表
    平均值算法
    stm8 16M晶振下精确软件延时
  • 原文地址:https://www.cnblogs.com/davidgu/p/4815431.html
Copyright © 2020-2023  润新知