18.1【STL常用遍历算法】

  1 #include<iostream>
  2 #include<cstdlib>
  3 using namespace std;
  4 #include<vector>
  5 #include<algorithm>
  6 
  7 
  8 /*
  9     5 STL常用算法
 10 
 11         算法主要是由头文件<algorithm> <functional> <numeric> 组成。
 12 
 13         <algorithm> 是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等
 14         <numeric> 体积很小,只包括几个在序列上面进行简单数学运算的模板函数
 15         <functional> 定义了一些模板类,用以声明函数对象。
 16 
 17     5.1 常用遍历算法
 18 
 19     5.1.1 for_each //遍历容器
 20 
 21         for_each(iterator beg, iterator end, _func);
 22 
 23         // 遍历算法 遍历容器元素
 24         // beg 开始迭代器
 25         // end 结束迭代器
 26         // _func 函数或者函数对象(回调函数)
 27 
 28         for_each在实际开发中是最常用遍历算法,需要熟练掌握
 29 
 30     5.1.2 transform //搬运容器到另一个容器中
 31 
 32         transform(iterator beg1, iterator end1, iterator beg2, _func);
 33 
 34         //beg1 源容器开始迭代器
 35         //end1 源容器结束迭代器
 36         //beg2 目标容器开始迭代器
 37         //_func 函数或者函数对象
 38 
 39         搬运的目标容器必须要提前开辟空间,否则无法正常搬运
 40 */
 41 
 42 
 43 void print1(int val)
 44 {
 45     cout << val << " ";
 46 }
 47 
 48 
 49 class Print2
 50 {
 51 public:
 52     void operator()(int val)
 53     {
 54         cout << val << " ";
 55     }
 56 };
 57 
 58 
 59 void test511()
 60 {
 61     vector<int> v;
 62     for(int i=0; i<10; i++)
 63     {
 64         v.push_back(i);
 65     }
 66 
 67     for_each(v.begin(), v.end(), print1); //普通函数
 68     cout << endl;
 69 
 70     for_each(v.begin(), v.end(), Print2()); //仿函数,匿名函数对象
 71     cout << endl;
 72 }
 73 
 74 
 75 class MyTransform
 76 {
 77 public:
 78     int operator()(int val)
 79     {
 80         return val + 1000; //可在此处进行过逻辑运算等
 81     }
 82 };
 83 
 84 
 85 void test512()
 86 {
 87     vector<int> v; //源容器
 88     for(int i=0; i<10; i++)
 89     {
 90         v.push_back(i);
 91     }
 92 
 93     vector<int> v_target; //目标容器
 94     v_target.resize(v.size()); //目标容器需要提前开辟空间,否则报错
 95 
 96     transform(v.begin(), v.end(), v_target.begin(), MyTransform());
 97 
 98     for_each(v_target.begin(), v_target.end(), Print2());
 99     cout << endl;
100 }
101 
102 
103 int main()
104 {
105     test511();
106     test512();
107 
108     system("pause");
109     return 0;
110 }

 

posted @ 2021-05-12 20:26  yub4by  阅读(163)  评论(0编辑  收藏  举报