【Tricks】Lambda表达式

前言

很多时候,我们需要定义一些小的函数
比如在sort()时指定比较函数cmp()

sort(a+1, a+1+n, cmp)
bool cmp(const int a, cnost int b) {return a > b;}

但这么小的函数写在外面会有一点不优雅
于是我们可以用 λ表达式 来解决这个问题

解决方案

Lambda表达式如果叫做匿名函数的话可能更能凸显他的特性
详细情况请参阅参考资料中的链接
对于竞赛来讲,似乎Lambda表达式这么用就好:

static auto cmp = [](int a, int b) {return a > b;};
sort(a+1, a+1+n, cmp);

或者再做绝一点:

sort(a+1, a+1+n, [](int a, int b) {return a > b;});

是不是感觉很强 ( •̀ ω •́ )y

兼容性

无论是 Lambda表达式 或是auto都是 C++ 11里的东西
直接交到不支持 C++ 11 的OJ上会CE
于是我们需要加上下面这句指令,以使编译器忽略该错误:

#pragma GCC diagnostic error "-std=c++11"

当然gcc的版本需要在4.7以上,否则编译器根本不知道Lambda表达式是什么 QwQ

参考资料

  1. http://en.cppreference.com/w/cpp/language/lambda
  2. http://www.lellansin.com/c-lambda表达式基本用法.html