STL之适配器

匿名 (未验证) 提交于 2019-12-02 23:55:01

摘要:本文主要讲了适配器的一些内容,重要的是了解适配器使用的步骤。

  1 #include<iostream>   2 #include<vector>   3 #include <algorithm>   4 #include<functional>   5 #include <string>   6    7 using namespace std;   8    9 //第一步 绑定 数据 bind2nd  10 //继承类 binary_function<参数类型1 ,参数类型2 ,返回值类型>  11 //加const修饰 operator()  12 class MyPrint:public binary_function<int,int,void> {  13 public:  14     void operator()(int v,int start)const{  15         cout << v+start << endl;  16     }  17 };  18 void test01() {  19     vector<int>v;  20     for (int i=0;i<10;i++)  21     {  22         v.push_back(i);  23     }  24     cout << "请输入起始值" << endl;  25     int num;  26     cin >> num;  27     for_each(v.begin(), v.end(),bind2nd(MyPrint(),num));    28 }  29   30 class GreaterThenFive :public unary_function<int, bool>  31 {  32 public:  33     bool operator()(int v) const  34     {  35         return v > 5;  36     }  37 };  38   39 void test02() {  40     vector<int>v;  41     for (int i=0;i<10;i++)  42     {  43         v.push_back(i);  44     }  45     vector<int>::iterator pos = find_if(v.begin(), v.end(), not1(GreaterThenFive()));  46     //vector<int>::iterator pos = find_if(v.begin(),v.end(),not1(bind2nd(greater<int>(),5)));  //取反适配器,找到的是小于5的数字  47     if (pos!=v.end())  48     {  49         cout << "找到小于5的数" << *pos << endl;  50     }  51     else {  52         cout << "未找到" << endl;  53     }  54 }  55   56 void MyPrint03(int v, int start)  57 {  58     cout << v + start << endl;  59 }  60 //函数指针适配器  61 void test03()  62 {  63     vector<int>v;  64     for (int i = 0; i < 10; i++)  65     {  66         v.push_back(i);  67     }  68     //将函数指针 适配为 函数对象  69     // ptr_fun  70     for_each(v.begin(), v.end(), bind2nd(ptr_fun(MyPrint03), 100));  71 }  72   73 //成员函数适配器  74 class Person  75 {  76 public:  77     Person(string name, int age)  78     {  79         this->m_Name = name;  80         this->m_Age = age;  81     }  82   83     void showPerson()  84     {  85         cout << "成员函数中:姓名: " << m_Name << " 年龄:" << m_Age << endl;  86     }  87     void plusAge()  88     {  89         this->m_Age = this->m_Age + 100;  90     }  91   92     string m_Name;  93     int m_Age;  94 };  95   96 void MyPrintPerson(Person & p)  97 {  98     cout << "姓名: " << p.m_Name << " 年龄:" << p.m_Age << endl;  99 } 100  101 void test04() 102 { 103     vector<Person>v; 104  105     Person p1("aaa", 10); 106     Person p2("bbb", 15); 107     Person p3("ccc", 18); 108     Person p4("ddd", 40); 109  110     v.push_back(p1); 111     v.push_back(p2); 112     v.push_back(p3); 113     v.push_back(p4); 114  115     //成员函数适配器 116     // mem_fun_ref 117     for_each(v.begin(), v.end(), mem_fun_ref(&Person::showPerson)); 118     for_each(v.begin(), v.end(), mem_fun_ref(&Person::plusAge)); 119     for_each(v.begin(), v.end(), mem_fun_ref(&Person::showPerson)); 120 } 121  122 int main() { 123     //test01(); 124     //test02(); 125     //test03(); 126     test04(); 127     system("pause"); 128     return 0; 129 }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!