17.3【STL之内建函数对象】

  1 #include<iostream>
  2 #include<cstdlib>
  3 using namespace std;
  4 #include<functional>
  5 #include<vector>
  6 #include<algorithm>
  7 
  8 
  9 /*
 10     4.3 内建函数对象
 11 
 12     4.3.1 内建函数对象意义
 13 
 14         概念:
 15             内建了一些函数对象
 16         分类:
 17             算术仿函数
 18             关系仿函数
 19             逻辑仿函数
 20         用法:
 21             这些仿函数所产生的对象,用法和一般函数完全相同
 22             使用内建函数对象,需要引入头文件 #include<functional>
 23 
 24     4.3.2 算术仿函数
 25 
 26         template<class T> T plus<T> //加法仿函数
 27         template<class T> T minus<T> //减法仿函数
 28         template<class T> T multiplies<T> //乘法仿函数
 29         template<class T> T divides<T> //除法仿函数
 30         template<class T> T modulus<T> //取模仿函数
 31         template<class T> T negate<T> //取反仿函数(注意,此仿函数是一元运算,以上其余仿函数均为二元运算)
 32 
 33     4.3.3 关系仿函数
 34 
 35         template<class T> bool equal_to<T> //等于
 36         template<class T> bool not_equal_to<T> //不等于
 37         template<class T> bool greater<T> //大于
 38         template<class T> bool greater_equal<T> //大于等于
 39         template<class T> bool less<T> //小于
 40         template<class T> bool less_equal<T> //小于等于
 41 
 42     4.3.4 逻辑仿函数
 43 
 44         template<class T> bool logical_and<T> //逻辑与
 45         template<class T> bool logical_or<T> //逻辑或
 46         template<class T> bool logical_not<T> //逻辑非
 47 */
 48 
 49 
 50 void test432()
 51 {
 52     negate<int> n;
 53     cout << n(50) << endl; //-50
 54 
 55     plus<int> p;
 56     cout << p(10, 10) << endl; //20
 57 }
 58 
 59 
 60 class MySort
 61 {
 62 public:
 63     bool operator()(int num1, int num2)
 64     {
 65         return num1 > num2;
 66     }
 67 };
 68 
 69 
 70 
 71 void test433()
 72 {
 73     vector<int> v;
 74     v.push_back(30);
 75     v.push_back(10);
 76     v.push_back(20);
 77     v.push_back(50);
 78     v.push_back(40);
 79 
 80     for(vector<int>::iterator it=v.begin(); it!=v.end(); it++)
 81     {
 82         cout << *it << " ";
 83     }
 84     cout << endl;
 85 
 86     //降序
 87     //sort(v.begin(), v.end(), MySort()); // 自己实现仿函数
 88     sort(v.begin(), v.end(), greater<int>()); //STL内建仿函数,效果同上
 89 
 90     for(vector<int>::iterator it=v.begin(); it!=v.end(); it++)
 91     {
 92         cout << *it << " ";
 93     }
 94     cout << endl;
 95 }
 96 
 97 
 98 void test434()
 99 {
100     vector<bool> v;
101     v.push_back(true);
102     v.push_back(false);
103     v.push_back(true);
104     v.push_back(false);
105 
106     for(vector<bool>::iterator it=v.begin(); it!=v.end(); it++)
107     {
108         cout << *it << " ";
109     }
110     cout << endl;
111 
112     //利用逻辑非 将容器v中的数据复制到容器v2中,并执行取反操作
113     vector<bool> v2;
114     v2.resize(v.size());
115     transform(v.begin(), v.end(), v2.begin(), logical_not<bool>()); //transform需要algorithm头文件
116 
117     for(vector<bool>::iterator it=v2.begin(); it!=v2.end(); it++)
118     {
119         cout << *it << " ";
120     }
121     cout << endl;
122 }
123 
124 
125 int main()
126 {
127     test432();
128     test433();
129     test434();
130 
131     system("pause");
132     return 0;
133 }

 

posted @ 2021-05-12 19:48  yub4by  阅读(40)  评论(0编辑  收藏  举报