c++之lambda表示式
在寫程式碼時,我們會遇到這種程式碼:
sort(points.begin(),points.end(),[](const vector<int>& u,const vector<int>& v){
return u[0] * u[0] + u[1] * u[1] < v[0] * v[0] + v[1] * v[1];
});
我們知道sort()函式第三個引數是函式符,函式指標或者lambda表示式,而這個例子中後面一串長長的就是lambda表示式。
lambda表示式
特性:
1.使用[]替代函式名,沒有宣告返回型別;
2.返回型別自動推斷;
3.可指定名稱,比如:
auto mod3 = [](int x){return x % == 0};
4.可訪問作用域內的動態變數,有兩種方式:
按值訪問,[變數名]
加上&,按引用訪問,[&變數名]
[=]按值訪問所有變數,[&]按引用訪問所有;
int count13 = 0;
std::for_each(numbers.begin(),numbers.end(),[&count13](intx){count13 += x % 13 == 0});
為何使用:
使用整個lambda表示式替換函式指標或者函式符建構函式;
其定義和使用是在同一個地方進行的,不需要檢視原始碼,修改時也可以一目瞭然,同時將類似於函式的表示式用作接受函式指標或者函式符的函式的引數;
下面是一個使用例子(來自c++prime plus)
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <ctime>
const long Size = 390000L;
int main()
{
using namespace std;
vector<int> numbers(Size);
srand(time(0));
generate(numbers.begin(),numbers.end(),rand);
cout << "sample size = " << Size << endl;
int count3 = count_if(numbers.begin(),numbers.end(),
[](int x){return x % 3 == 0;});
cout<<"count of numbers divisible by 3:" << count3 << endl;
int count13 = 0;
for_each(numbers.begin(),numbers.end(),
[&count13](int x){count13 += x % 13 == 0;});
cout<< "count of number divisible by 13:" << count13 << endl;
count3 = count13 = 0;
for_each(numbers.begin(),numbers.end(),
[&](int x){count3 += x % 3 == 0;count13 += x % 13 == 0;});
cout<< "count of number divisible by 3:" << count3 << endl;
cout<< "count of number divisible by 13:" << count13 << endl;
return 0;
}
這個例子主要是利用lambda表示式作為引數,判斷變數是否可以被3或者13整除
程式碼輸出:
相關文章
- 【C++】C++之Lambda表示式C++
- Java之lambda表示式Java
- C++ lambda表示式的通用格式C++
- C++ Lambda 表示式使用詳解C++
- C++ lambda 表示式與「函式物件」(functor)C++函式物件
- JDK1.8之lambda表示式JDK
- JDK1.8 之Lambda表示式JDK
- lambda 表示式
- lambda表示式
- JDK 1.8 新特性之Lambda表示式JDK
- Python3之lambda表示式Python
- 【譯】java8之lambda表示式Java
- Java | Lambda表示式Java
- Lambda表示式(Java)Java
- java lambda 表示式Java
- 八,Lambda表示式
- Java Lambda表示式Java
- C++ 接受狀態變數的lambda表示式C++變數
- C++ 中的lambda表示式【C++11版本】C++
- [轉]Java 8 的 lambda 表示式 Java 8 的 lambda 表示式Java
- JDK1.8新特性之Lambda表示式JDK
- JDK1.8新特性之Lambda表示式()->JDK
- java8 新特性之Lambda 表示式Java
- Java8 新特性之 Lambda 表示式Java
- jdk1.8 新特性之 lambda表示式JDK
- C++11新特性之Lambda表示式C++
- Lambda表示式之爭:Scala vs Java 8Java
- C# Lambda表示式詳解,及Lambda表示式樹的建立C#
- 如何利用 C++ 的 Lambda 表示式提升 Qt 程式碼C++QT
- 淺談lambda表示式
- Lambda表示式詳解
- kotlin lambda表示式Kotlin
- Python - lambda 表示式Python
- Lambda表示式總結
- Java的Lambda表示式Java
- Java 8 Lambda 表示式Java
- C++Lambda表示式C++
- java 8 lambda表示式Java