lambda表达式[=&]()mutable->{}()
ISO C++ 11 标准的一大亮点是引入Lambda表达式。基本语法如下:
[capture list] (parameter list) -> return type { function body }
主要用于解决函数内部函数定义的问题。例如调用中的std::sort,ISO C++ 98 的写法是要先写一个compare函数:
bool compare(int& a,int& b)
{
return a>b;
}
然后,再这样调用:
sort(a, a+n, compare);
然而,用ISO C++ 11 标准新增的Lambda表达式,可以这么写:
sort(a, a+n, [](int a,int b){return a>b;});//降序排序
这样一来,代码明显简洁多了。
[](char *language)->char * {cout<<"hello "<<language<<endl; }("lambda");
//auto fun(char *language)->char * = [] { cout<<"hello lambda"<<endl; };
//fun("lambda");
//=只读,只能指定全部,&可单个指定,可多个指定
//mutable读原本,写副本
函数包装器
#include
c++风格的函数指针
function<int (int, int)> add = [](int a, int b)->int{return a+b;};
cout<<add(1, 2)<<endl;
模板元
递归函数返回需要时间,模板元用于递归加速(运行时间转化为编译时间),游戏里使用比较多。
long climb(int n){
if (1==n) {
return 1;
}else if (2==n){
return 2;
}else{
return climb(n-1)+climb(n-2);
}
}
template<int N>
struct Climb{
enum{
res=Climb<N-1>::res +Climb<N-2>::res
};
};
template<>
struct Climb<1>
{
enum { res = 1};
};
template<>
struct Climb<2>
{
enum { res = 2};
};
调用时只支持常量,不支持变量
//Climb<30>::res fast than climb(30);
cout<<"have "<<Climb<30>::res<<" kinds of function to climb 30 steps"<<endl;