仿函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仿函数相关的知识,希望对你有一定的参考价值。

1、仿函数

  本质:是一个对象,用起来像函数;

  原因:在类内对()进行了重载;

2、仿函数和回调函数的区别

(1)、代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;

//函数对象:类重载了();
//函数对象和函数是很类似的;

template<typename Type>
class ShowElem{
    public:
        ShowElem(){
            n = 0;
        }   
        void operator()(Type &t){   //重载了(),此时可以叫做函数对象;
            n++;
            cout<<t<<endl;
        }   
        void printN(){
            cout<<"n:"<<n<<endl;    
        }   
    protected:
    private:
        int n;
};

void main01(){
    int a = 10;
    ShowElem<int> showElem;
    showElem(a); //函数对象的()的执行,很像一个函数;所以又叫做仿函数;
                 //函数对象可以跟函数的调用一样,直接把对象当作函数名称来使用!!!
}

//函数对象和普通函数的区别;
template<typename Type>  //函数模版
void FuncShowElem(Type &t){
    cout<<t<<endl;
}

void FuncShowElem2(int &t){ //普通函数
    cout<<t<<endl;
}

void main02(){
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);

    for_each(v1.begin(), v1.end(), ShowElem<int>()); //匿名函数对象 匿名仿函数;
    cout<<endl;
    for_each(v1.begin(), v1.end(), FuncShowElem2); //通过回调函数;谁使用for_each()

}

int main(void){
    main01();
    main02();

    return 0;
}

(2)、运行结果:

技术分享




本文出自 “wait0804” 博客,请务必保留此出处http://wait0804.blog.51cto.com/11586096/1875944

以上是关于仿函数的主要内容,如果未能解决你的问题,请参考以下文章

Vector的仿函数用法

STL 源码剖析笔记之仿函数

c++ 之定制删除器的代码实现(使用仿函数)

是否可以在Thrust仿函数中调用设备函数?

仿函数

js 仿 asp中的 asc 和 chr 函数的代码