标签:
P28 介绍了lambda表达式基本语法
P475 介绍了STL函数对象及Lambda
这里假设我们定义了一个如上图的lambda表达式。现在来介绍途中标有编号的各个部分是什么意思。
代码:
#include <iostream> using namespace std; int main() { int x = 3, y = 5; auto fun1 = []{ cout << "hello" << endl; }; auto fun2 = [&] { cout << "x:" << x++ << endl; cout << "y:" << y++ << endl; }; auto fun3 = [](int x, int y){return x + y; }; fun1(); fun2(); fun2(); cout<<fun3(6, 8); system("pause"); return 0; }
输出:
解释:
fun1以最简单的lambda表达式,也就是[]{}
fun2指出使用引用的方式传值,x,y在函数使用中改变其值
fun3标明lambda可以拥有参数,指明小括号内
注意:
1. lambda的类型,是个不具名的functiong object,每个lambda表达式的类型都是独一无二的,如果想根据该类型声明对象,可借助于template和auto
2. 使用过程中容易出错的是 auto fun[]{};和fun();
lambda表达式常和STL一起使用
与generate和for_each
#include <iostream> #include <algorithm> #include <ctime> using namespace std; int main() { int a[10] = { 0 }; srand(time(NULL)); generate(a, a + 10, [](){ return rand() % 100; }); cout << "before sort: " << endl; for_each(a, a + 10, [&](int i){ cout << i << " "; }); cout << endl; cout << "After sort" << endl; sort(a, a + 10); for_each(a, a + 10, [&](int i){ cout << i << " "; }); system("pause"); return 0; }
标签:
原文地址:http://www.cnblogs.com/raichen/p/5619318.html