这次写的仍然是函数,只不过这次会讲一种用于存储函数的库functional
与一种新的函数lambda
functional
库
其实标题已经讲了库名
#include <functional>
定义
这个库是用于存储函数的库,定义方法类似于后期定义STL容器的方法
function<Typ(List)> Funal = Funct; //定义一个函数变量,并执行Funct的操作,List中填的是原函数参数列表
Typ
中还可以填auto
这个关键字,表示现在不确定类型,但必须在定义后赋值! 如果你在DEV中执行失败,就点这里的蓝色字体
#include <iostream>
#include <functional>
using namespace std;
void f(int& a, int& b) {
int t = a;
a = b;
b = t;
}
int main() {
function<void> swap = f; //让swap代替f执行函数
int a=60, b=80;
swap(a, b);
cout << a << ' ' << b << endl;
return 0;
}
lambda函数
lambda函数也被称为匿名函数,它和普通函数最大的区别是一个有函数名,一个没有函数名,其次是一个必须在main
函数外定义,一个可以在所有函数里面定义。它的具体定义操作是这样的
[Sig](Lst) {//Sig待会说,可以选择不填;Lst是参数列表
...... //执行代码
return Val; //返回Val
}(Cho); //这里可以省略;Cho表示填写的参数
Sig
中的具体填写方法
[]
:不捕获所有变量[Var]
:使用值传递的方式捕获变量Var
(函数中的值与外值不同步)[&Var]
:使用引用传递的方式捕获变量Var
(函数内的值与外值同步)[=]
:使用值传递的方式捕获所有外部变量(父变量)[&]
:使用引用传递的方式捕获所有外部变量(父变量)
lambda与functional的混合
我们可以在原本代码(点我)的Funct
中填入lambda
函数,就像这样
#include <iostream>
#include <functional>
using namespace std;
int main() {
function<void(int& a, int& b)> swap = [](int& a, int& b) {
int t = a;
a = b;
b = t;
return ;
};
int a = 60, b = 80;
swap(a, b);
cout << a << ' ' << b;
return 0;
}