条件求和

题目描述

给出函数模板 sumIf 的定义。它的首个参数为 int 类型元素的范围 r,第二个参数为可单参数调用的判断条件 fsumIf 返回范围 r 中,满足 f 条件的所有元素的和。

关于输入

无。

关于输出

见样例输出。

参考答案

#include <iostream>
#include <list>
#include <vector>

template <typename R, typename F>
int sumIf(const R& range, F pred) {
    int sum = 0;
    for (int x : range) {
        if (pred(x)) {
            sum += x;
        }
    }
    return sum;
}

int main() {
    std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    auto x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int a[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::list<int> l{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    std::cout << sumIf(v, [](int i) { return i % 3 == 1; }) << std::endl;
    std::cout << sumIf(x, [](int i) { return i % 3 == 0; }) << std::endl;
    std::cout << sumIf(a, [](int i) { return i % 2 == 0; }) << std::endl;
    std::cout << sumIf(l, [](int i) { return i % 2 == 1; }) << std::endl;
}