浅析回调函数,仿函数,Lambda表达式

一、

1、回调函数与仿函数的异同建议去看这位大佬的博文 https://www.daimajiaoliu.com/daima/4ef1bdc4d900400

  总的意思是能用访函数就不用回调...

2、仿函数以类的形式创建,广泛运用在algorithm的算法中

3、随着c++的发展,人们认为每用到仿函数都写一个类太麻烦了,于是C++11语法中出现了Lambda表达式

Lambda表达式完整格式如下:

[capture list] (params list) mutable exception-> return type { function body }

capture list:捕获外部变量列表
params list:形参列表
mutable:标明是否可以修改捕获的变量

return type:返回类型
function body:函数体

我们有时也可以省略其中的一些部分

4、Lambda表达式捕获外部变量与Lambda的参数可以参考这个,写的很棒:

https://www.cnblogs.com/DswCnblog/p/5629165.html

 

二、下面是我对 回调函数,仿函数,Lambda表达式 的简单使用:

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <vector>
void print01(int val)//普通函数//
{
    cout<<val<<"\t";
}


class print02
{
public:
    void operator()(int a)
    {
        cout<<a<<"\t";
    }
};

//for_each//
void Funfor_each()
{
    vector<int>v;
    for(int i = 0;i<10;i++)
    {
        v.push_back(i);
    }

    //遍历、、
    for_each(v.begin(),v.end(),print01); //1、回调函数//
    cout<<endl;

    for_each(v.begin(),v.end(),print02());//2、仿函数//
    cout<<endl;

    for_each(v.begin(),v.end(),
        [](int a){ cout<<a<<"\t"; } );  //3、Lambda表达式//这里就省略了Lambda表达式的一部分//
    cout<<endl;
}



int _tmain(int argc, _TCHAR* argv[])    
{

    Funfor_each();
    getchar();
    return 0;
}

 

posted @ 2022-01-11 21:12  TLSN  阅读(106)  评论(0)    收藏  举报