zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Java学习二十九天
    Java学习二十八天
    47. Permutations II 全排列可重复版本
    46. Permutations 全排列,无重复
    subset ii 子集 有重复元素
    339. Nested List Weight Sum 339.嵌套列表权重总和
    251. Flatten 2D Vector 平铺二维矩阵
    217. Contains Duplicate数组重复元素
    209. Minimum Size Subarray Sum 结果大于等于目标的最小长度数组
    438. Find All Anagrams in a String 查找字符串中的所有Anagrams
  • 原文地址:https://www.cnblogs.com/lzy820260594/p/11412645.html
Copyright © 2011-2022 走看看