// ============================================================================ // p1c09_04_05 — 4.3 常用遍历算法 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用 // // --- 原文片段 [pageId:blockIdx] --- 标注出处。 // 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。 // ============================================================================ #include using namespace std; #include #include // --- 原文片段 [58954498:4] 4.3 常用遍历算法 --- /* template inline void for_each(_InIt _First, _InIt _Last, _Fn1 _Func) { for (; _First != _Last; ++_First) _Func(*_First); } */ //普通函数 void print01(int val){ cout << val << " "; } //函数对象 struct print001{ void operator()(int val){ cout << val << " "; } }; //for_each算法基本用法 void test01(){ vector v; for (int i = 0; i < 10;i++){ v.push_back(i); } //遍历算法 for_each(v.begin(), v.end(), print01); cout << endl; for_each(v.begin(), v.end(), print001()); cout << endl; } struct print02{ print02(){ mCount = 0; } void operator()(int val){ cout << val << " "; mCount++; } int mCount; }; //for_each返回值 void test02(){ vector v; for (int i = 0; i < 10; i++){ v.push_back(i); } print02 p = for_each(v.begin(), v.end(), print02()); cout << endl; cout << p.mCount << endl; } struct print03 : public binary_function{ void operator()(int val,int bindParam) const{ cout << val + bindParam << " "; } }; //for_each绑定参数输出 void test03(){ vector v; for (int i = 0; i < 10; i++){ v.push_back(i); } for_each(v.begin(), v.end(), bind2nd(print03(),100)); } // --- main --- int main() { test01(); test02(); test03(); return 0; }