Iterator and Algorithm Patterns
Count If Threshold
std::count_if counts values that satisfy a predicate without writing the counting loop by hand.
predicate
A predicate is a function or lambda that returns true or false for each value.
count_if
`std::count_if` applies a predicate over a range and returns the number of matches.
Count If Threshold
count_if_threshold.cpp
Replay: real traced execution (multi-file project)
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores{72, 85, 91, 64};
int minimum = 80;
int passing = static_cast<int>(std::count_if(scores.begin(), scores.end(),
[minimum](int score) {
return score >= minimum;
}));
std::cout << "minimum=" << minimum << std::endl;
std::cout << "passing=" << passing << std::endl;
return 0;
}
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores{72, 85, 91, 64};
int minimum = 70;
int passing = static_cast<int>(std::count_if(scores.begin(), scores.end(),
[minimum](int score) {
return score >= minimum;
}));
std::cout << "minimum=" << minimum << std::endl;
std::cout << "passing=" << passing << std::endl;
return 0;
}
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> scores{72, 85, 91, 64};
int minimum = 90;
int passing = static_cast<int>(std::count_if(scores.begin(), scores.end(),
[minimum](int score) {
return score >= minimum;
}));
std::cout << "minimum=" << minimum << std::endl;
std::cout << "passing=" << passing << std::endl;
return 0;
}
scores ← [72, 85, 91, 64], minimum ← 80, passing ← 2
5int main() {6 std::vector<int> scores→ [72, 85, 91, 64]{72, 85, 91, 64};7 int minimum→ 80 = 80; //@minimum=70, 9089 int passing→ 2 = static_cast<int>(std::count_if(scores[72, 85, 91, 64].begin(), scores.end(),10 [minimum](int score) {11 return score >= minimum;12 }));1314 std::cout << "minimum=" << minimum80 << std::endl;15 std::cout << "passing=" << passing2 << std::endl;16 return 0;17}outputminimum=80 passing=2
scores ← [72, 85, 91, 64], minimum ← 70, passing ← 3
5int main() {6 std::vector<int> scores→ [72, 85, 91, 64]{72, 85, 91, 64};7 int minimum→ 70 = 70;89 int passing→ 3 = static_cast<int>(std::count_if(scores[72, 85, 91, 64].begin(), scores.end(),10 [minimum](int score) {11 return score >= minimum;12 }));1314 std::cout << "minimum=" << minimum70 << std::endl;15 std::cout << "passing=" << passing3 << std::endl;16 return 0;17}outputminimum=70 passing=3
scores ← [72, 85, 91, 64], minimum ← 90, passing ← 1
5int main() {6 std::vector<int> scores→ [72, 85, 91, 64]{72, 85, 91, 64};7 int minimum→ 90 = 90;89 int passing→ 1 = static_cast<int>(std::count_if(scores[72, 85, 91, 64].begin(), scores.end(),10 [minimum](int score) {11 return score >= minimum;12 }));1314 std::cout << "minimum=" << minimum90 << std::endl;15 std::cout << "passing=" << passing1 << std::endl;16 return 0;17}outputminimum=90 passing=1