// ============================================================================ // p1c09_04_02 — 4.2 谓词 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用 // // --- 原文片段 [pageId:blockIdx] --- 标注出处。 // 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。 // ============================================================================ #include using namespace std; #include #include // --- 原文片段 [58954498:1] 4.2 谓词 --- class GreaterThenFive { public: bool operator()(int num) { return num > 5; } }; //一元谓词 void test01() { vector v; for (int i = 0; i < 10;i ++) { v.push_back(i); } vector::iterator it = find_if(v.begin(), v.end(), GreaterThenFive()); if (it == v.end()) { cout << "没有找到" << endl; } else { cout << "找到了: " << *it << endl; } } //二元谓词 class MyCompare { public: bool operator()(int num1, int num2) { return num1 > num2; } }; void test02() { vector v; v.push_back(10); v.push_back(40); v.push_back(20); v.push_back(90); v.push_back(60); //默认从小到大 sort(v.begin(), v.end()); for (vector::iterator it = v.begin(); it != v.end();it++) { cout << *it << " "; } cout << endl; cout << "----------------------------" << endl; //使用函数对象改变算法策略,排序从大到小 sort(v.begin(), v.end(),MyCompare()); for (vector::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; } // --- main --- int main() { test01(); test02(); return 0; }