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#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#include
#include #include "../../Algorithm/MathUtil.h"#include "PredicateTest.h"using namespace std;void PredicateTest::unaryPredicate(){ list 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:30Input End Number:5031 is first prime number found---------------- unaryPredicate(): Run End ----------------