Lambdas and Callables
Lambda Predicates
A predicate lambda returns true or false for a value.
predicate
Standard algorithms often use predicate callables to decide which values match.
Lambda Predicates
lambda_predicates.cpp
Replay: real traced execution (multi-file project)
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
int threshold = 6;
std::vector<int> scores{2, 5, 7, 9};
int count = std::count_if(scores.begin(), scores.end(), [threshold](int score) {
return score > threshold;
});
std::cout << "threshold=" << threshold << std::endl;
std::cout << "count=" << count << std::endl;
return 0;
}
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
int threshold = 3;
std::vector<int> scores{2, 5, 7, 9};
int count = std::count_if(scores.begin(), scores.end(), [threshold](int score) {
return score > threshold;
});
std::cout << "threshold=" << threshold << std::endl;
std::cout << "count=" << count << std::endl;
return 0;
}
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
int threshold = 8;
std::vector<int> scores{2, 5, 7, 9};
int count = std::count_if(scores.begin(), scores.end(), [threshold](int score) {
return score > threshold;
});
std::cout << "threshold=" << threshold << std::endl;
std::cout << "count=" << count << std::endl;
return 0;
}
threshold ← 6, scores ← [2, 5, 7, 9], count ← 2
5int main() {6 int threshold→ 6 = 6; //@threshold=3, 878 std::vector<int> scores→ [2, 5, 7, 9]{2, 5, 7, 9};9 int count→ 2 = std::count_if(scores[2, 5, 7, 9].begin(), scores.end(), [threshold](int score) {10 return score > threshold;11 });1213 std::cout << "threshold=" << threshold6 << std::endl;14 std::cout << "count=" << count2 << std::endl;15 return 0;16}outputthreshold=6 count=2
threshold ← 3, scores ← [2, 5, 7, 9], count ← 3
5int main() {6 int threshold→ 3 = 3;78 std::vector<int> scores→ [2, 5, 7, 9]{2, 5, 7, 9};9 int count→ 3 = std::count_if(scores[2, 5, 7, 9].begin(), scores.end(), [threshold](int score) {10 return score > threshold;11 });1213 std::cout << "threshold=" << threshold3 << std::endl;14 std::cout << "count=" << count3 << std::endl;15 return 0;16}outputthreshold=3 count=3
threshold ← 8, scores ← [2, 5, 7, 9], count ← 1
5int main() {6 int threshold→ 8 = 8;78 std::vector<int> scores→ [2, 5, 7, 9]{2, 5, 7, 9};9 int count→ 1 = std::count_if(scores[2, 5, 7, 9].begin(), scores.end(), [threshold](int score) {10 return score > threshold;11 });1213 std::cout << "threshold=" << threshold8 << std::endl;14 std::cout << "count=" << count1 << std::endl;15 return 0;16}outputthreshold=8 count=1