浅析回调函数,仿函数,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; }