C++ 11 笔记 (一) : lambda
时至今日都是我咎由自取,错就是错,与任何人无关。掉进C++98的各种坑里无法自拔的抖M感,让我选择了华丽丽的无视C++11,导致今日面对开源的代码到各种看不懂的地步,一入C++深似海,我今天愿意承担一切后果。在努力摆脱小白的道路上,我必须再一次推倒我的三观,重新审视和坦然面对自己。
一段时间没有更新博客了,简直凄凉。
今天打算开几篇C++11的博客。看博容易,写博不易,且写且珍惜。。。
lambda表达式在C++算是千呼万唤始出来了,常见写法有下面几种:
1 auto lambda1 = [](std::string str) 2 { 3 std::cout << str << std::endl; 4 }; 5 6 int x = 3; 7 auto lambda2 = [=](int a, int b) 8 { 9 return a > x; 10 }; 11 12 auto lambda3 = [&](int a, int b) 13 { 14 x = 5; 15 return a > b; 16 };
[]表示不访问外部变量,[=]表示值访问,[&]表示引用访问。在上面的例子中,lambda1无法访问除str以外的变量,lambda2可以访问x的值,但是不能修改x的值,lambda3可以修改x的值。在 “=” 和 “&” 的后面是可以加变量名的,完全可以写成[=x, &y]。
最后举一个岂止水简直水的例子,那就是std::sort
1 int arr[] = { 1, 5, 2, 6, 3 }; 2 std::sort(arr, arr + 5, [](int x, int y) { return x > y; });
差不多就是这样了~~~