STL之适配器

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

  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 }

 

posted @ 2019-08-26 15:09  AmingGlaxy  阅读(241)  评论(0编辑  收藏  举报