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

minimum
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;
}
  1. 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
  1. 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
  1. 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