Lambda expression
The primary purpose of the C++11 standard lambda introduction is to:
A function-like expression can be used as a function parameter that accepts a function pointer or function, so a typical lambda expression is a test expression or a comparison expression that can be written as a statement, making Lambda simple and easy to understand.
1. A lambda expression has the following types:
[Capture List] (parameter list)->returntype{function body}
Capture list is a list of local function variables defined in a function that contains a lambda, return type, parameter list, and function list, respectively, representing return types, argument lists, and body of functions.
2. Lambda Capture and return
(1), Value capture
size_tv1=23;
Autof2=[v1]{return v1;}
v1=0;
Autoj=f ();//j=23
(2), reference capture
size_tv2=34;
Autof2=[&v2]{return v2;}
v1=0;
Autoj=f ();//j=0
(3), implicit capture
W=find_if (Q.begin (), Q.end (), [=] (conststring &s) {return s.size () >=sz;}) = Capture for value,& for reference
(4), variable lambda
If you want to change the captured variable, you must precede the parameter with mutable, as in the following example:
size_tv1=23;
AUTOF2=[V1] () Mutable{return ++v1;}
v1=0;
Autoj=f ();//j=23//j=24
size_tv2=34;
Autof2=[&v2]{return ++v2;}
v1=0;
Autoj=f ();//j=1
Capture List of lambda
[]-------An empty capture list, lambda cannot use the function variable in which it is located, and a lambda can only use it after capturing the variable;
[Names]--------names is a comma-separated list of names;
[&]----------An implicit capture list, using a reference capture method;
[=]-----------An implicit capture list, using the value capture method;
Use the sample code:
Use of/*LAMBDA expressions */#include <iostream> #include <vector> #include <cmath> #include <algorithm># Include<ctime>using namespace Std;void lambda () {vector<int> numbers (Size), Srand (Time (0)); Generate (Numbers.begin (), Numbers.end (), Rand);//Generate a random number and join the container cout<< "size=" <<numbers.size () << ' \ n ';//the size of the container int count3=count_if (Numbers.begin (), Numbers.end (), [] (int x) {return x%3==0;}); The/LAMBDA expression implements the number of computations divisible by 3 cout<< "count3=" <<count3<< ' \ n '; int Count13=0;for_each (Numbers.begin (), Numbers.end (), [&count13] (int x) {count13+=x%13==0;}); cout<< "count13=" <<count13<< ' \ n '; Count3=count13=0;for_each (Numbers.begin (), Numbers.end (), [ &] (int x) {count3+=x%3==0;count13==x%13==0;}); cout<< "count3=" <<count3<< ' \ n '; cout<< "count13=" <<count13<< ' \ n ';} int main () {lambda (); return 0;}
(End of full text)
Introduction to C + + lambda expressions