mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
Add my Changes
This commit is contained in:
parent
0e3ed9579b
commit
19ead59c1f
@ -820,6 +820,73 @@ std::map<Foo, int, compareFunction> fooMap;
|
|||||||
fooMap[Foo(1)] = 1;
|
fooMap[Foo(1)] = 1;
|
||||||
fooMap.find(Foo(1)); //true
|
fooMap.find(Foo(1)); //true
|
||||||
|
|
||||||
|
///////////////////////////////////////
|
||||||
|
// Lambda Expressions (C++11 and above)
|
||||||
|
///////////////////////////////////////
|
||||||
|
|
||||||
|
// lambdas are a convenient way of defining an anonymous function
|
||||||
|
// object right at the location where it is invoked or passed as
|
||||||
|
// an argument to a function.
|
||||||
|
|
||||||
|
// For example, consider sorting a vector of pairs using the second
|
||||||
|
// value of the pair
|
||||||
|
|
||||||
|
vector<pair<int, int> > tester;
|
||||||
|
tester.push_back(make_pair(3, 6));
|
||||||
|
tester.push_back(make_pair(1, 9));
|
||||||
|
tester.push_back(make_pair(5, 0));
|
||||||
|
|
||||||
|
// Pass a lambda expression as third argument to the sort function
|
||||||
|
// sort is from the <algorithm> header
|
||||||
|
|
||||||
|
sort(tester.begin(), tester.end(), [](const pair<int, int>& lhs, const pair<int, int>& rhs) {
|
||||||
|
return lhs.second < rhs.second;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Notice the syntax of the lambda expression,
|
||||||
|
// [] in the lambda is used to "capture" variables.
|
||||||
|
// For Example:
|
||||||
|
|
||||||
|
vector<int> dog_ids;
|
||||||
|
// number_of_dogs = 3;
|
||||||
|
for(int i = 0; i < 3; i++){
|
||||||
|
dog_ids.push_back(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
int weight[3] = {30, 50, 10};
|
||||||
|
|
||||||
|
// Say you want to sort dog_ids according to the dogs' weights
|
||||||
|
// So dog_ids should in the end become: [2, 0, 1]
|
||||||
|
|
||||||
|
// Here's where lambda expressions come in handy
|
||||||
|
|
||||||
|
sort(dog_ids.begin(), dog_ids.end(), [&weight](const int &lhs, const int &rhs) {
|
||||||
|
return weight[lhs] < weight[rhs];
|
||||||
|
});
|
||||||
|
// Note we captured "weight" by reference in the above example.
|
||||||
|
|
||||||
|
// lambda are really useful for the case of structs
|
||||||
|
// You can use lambda expressions instead of overloading
|
||||||
|
// the "<" operator
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
// Range For (C++11 and above)
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
|
// You can use a range for loop to iterate over a container
|
||||||
|
int arr[] = {1, 10, 3};
|
||||||
|
|
||||||
|
for(int elem: arr){
|
||||||
|
cout << elem << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can use "auto" and not worry about the type of the elements of the container
|
||||||
|
// For example:
|
||||||
|
|
||||||
|
for(auto elem: arr) {
|
||||||
|
// Do something with each element of arr
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////
|
/////////////////////
|
||||||
// Fun stuff
|
// Fun stuff
|
||||||
/////////////////////
|
/////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user