1 #include<iostream>
2 #include<cstdlib>
3 using namespace std;
4 #include<algorithm>
5 #include<vector>
6
7
8 /*
9 5.4.2 replace
10 将容器内指定范围的旧元素修改为新元素
11 replace(iterator beg, iterator end, oldvalue, newvalue);
12 // 将区间内旧元素 替换成 新元素
13 // beg 开始迭代器
14 // end 结束迭代器
15 // oldvalue 旧元素
16 // newvalue 新元素
17 replace会替换区间内满足条件的元素
18
19 5.4.3 replace_if
20 将区间内满足条件的元素,替换成指定元素
21 replace_if(iterator beg, iterator end, _pred, newvalue);
22 // 按条件替换元素,满足条件的替换成指定元素
23 // beg 开始迭代器
24 // end 结束迭代器
25 // _pred 谓词
26 // newvalue 替换的新元素
27 replace_if按条件查找,可以利用仿函数灵活筛选满足的条件
28 */
29
30
31 void myprint(int val)
32 {
33 cout << val << " ";
34 }
35
36 class MyPrint
37 {
38 public:
39 void operator()(int val)
40 {
41 cout << val << " ";
42 }
43 };
44
45
46 class Greater30
47 {
48 public:
49 bool operator()(int val)
50 {
51 return val >= 30;
52 }
53 };
54
55
56 void test542()
57 {
58 vector<int> v;
59 v.push_back(10);
60 v.push_back(20);
61 v.push_back(30);
62 v.push_back(20);
63 v.push_back(40);
64 v.push_back(20);
65 v.push_back(30);
66
67 cout << "替换前:" << endl;
68 //for_each(v.begin(), v.end(), myprint);
69 for_each(v.begin(), v.end(), MyPrint()); //效果同上,回调函数用普通函数或仿函数(此处为匿名函数对象)皆可
70 cout << endl;
71
72 replace(v.begin(), v.end(), 20, 2000);
73
74 cout << "替换后:" << endl;
75 for_each(v.begin(), v.end(), myprint);
76 cout << endl;
77 }
78
79
80 void test543()
81 {
82 vector<int> v;
83 v.push_back(10);
84 v.push_back(20);
85 v.push_back(30);
86 v.push_back(20);
87 v.push_back(40);
88 v.push_back(20);
89 v.push_back(30);
90
91 cout << "替换前:" << endl;
92 for_each(v.begin(), v.end(), MyPrint());
93 cout << endl;
94
95 replace_if(v.begin(), v.end(), Greater30(), 3000);
96
97 cout << "替换后:" << endl;
98 for_each(v.begin(), v.end(), myprint);
99 cout << endl;
100 }
101
102
103 int main()
104 {
105 test542();
106 test543();
107
108 system("pause");
109 return 0;
110 }
