18.4.2【STL常用拷贝和替换算法replace、replace_if】

  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 }

 

posted @ 2021-05-14 09:12  yub4by  阅读(93)  评论(0编辑  收藏  举报