条件求和
题目描述
给出函数模板 sumIf
的定义。它的首个参数为 int
类型元素的范围 r,第二个参数为可单参数调用的判断条件 f。sumIf
返回范围 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;
}