• stl(15)函数对象(仿函数)


    1.定义一个类(结构体),这个类(结构体)种重载了"()"这个符号,然后用这个类(结构体)创建的对象就叫做函数对象。

    2.函数对象的用法和函数的用法类似,都是使用"()"调用。

    3.函数对象相较于函数可以拥有自己的状态。比如在定义函数对象的类的时候,可以定义一个int类型的属性来记录该函数对象被调用了多少次;

    4.函数对象是为了配合stl种的一些特定算法使用的,比如在为set容器自定义排序方法的时候就需要传入一个函数对象。

    5.函数对象可以作为一个函数的参数传入。

    6.如果一个函数对象有一个参数叫做一元仿函数,如果有两个参数叫做二元仿函数...

    例1:分别用函数和函数对象实现打印输出一个int的功能

    (1)函数实现

    void myPrint(int a){

      std::cout<<a<<std::endl;

    }

    void main(){

      myPrint(5);

    }

    (2)函数对象实现

    class MyPrint{

    public:

      void operator()(int a){

        std::cout<<a<<std::endl;

      }

    };

    void main(){

      MyPrint myPrint;

      myPrint(5);

    }

    例2:定义一个可以记录自己被调用了多少次的函数对象

    class MyPrint{

    public:

      int count = 0;

      void operator()(int a){

        std::cout<<a<<std::endl;

        count++;

      }

    };

    void main(){

      MyPrint myPrint;

      myPrint(5);

      myPrint(5);

      myPrint(5);

      std::cout<<"被调用的次数是:"<<myPrint.count<<std::endl;

    }

    例3:将函数对象作为一个参数传入函数内部

    class MyPrint{

    public:

      void operator()(int a){

        std::cout<<a<<std::endl;

      }

    };

    void doSome(MyPrint myPrint,int a){

      myPrint(a);

    }

    void main(){

      MyPrint myPrint;

        doSome(myPrint,5);

    }

  • 相关阅读:
    Hdu 1257 最少拦截系统
    Hdu 1404 Digital Deletions
    Hdu 1079 Calendar Game
    Hdu 1158 Employment Planning(DP)
    Hdu 1116 Play on Words
    Hdu 1258 Sum It Up
    Hdu 1175 连连看(DFS)
    Hdu 3635 Dragon Balls (并查集)
    Hdu 1829 A Bug's Life
    Hdu 1181 变形课
  • 原文地址:https://www.cnblogs.com/maycpou/p/14438109.html
Copyright © 2020-2023  润新知