练习6:使用范围 for 计算正数之和¶
任务描述¶
编写函数 sumPositive,计算整型容器中所有正数元素的和。
函数接收一个整数 vector,遍历其中的每个元素:大于 0 的元素参与求和,负数与 0 不参与计算。若容器为空或不包含正数,函数应返回 0。
相关知识¶
范围 for 循环¶
C++11 的范围 for 循环可用于依次访问数组或容器中的全部元素:
遍历 vector<int> 时,可以使用值传递:
本题只读取 int 元素,且 int 的复制开销很小,因此可以使用值传递。
常引用参数¶
函数参数使用 const std::vector<int>&,既避免复制整个容器,又保证函数不会修改容器内容。
编程要求¶
- 使用 C++11 标准编写程序。
- 完成函数
sumPositive的函数体。 - 函数必须采用以下声明形式:
- 必须使用范围
for循环遍历容器。 - 循环变量使用值传递,例如
int value。 - 只有大于
0的元素参与求和。 - 不得使用下标访问或迭代器遍历容器。
- 在
test函数中使用assert验证结果。
待完成代码¶
#include <cassert>
#include <iostream>
#include <vector>
// TODO:使用范围 for 循环完成求和
int sumPositive(const std::vector<int>& values) {
// TODO
}
void test() {
std::vector<int> values1 = {10, -5, 20, 0, -3};
std::vector<int> values2 = {-1, -2, -3};
std::vector<int> values3 = {};
assert(sumPositive(values1) == 30);
assert(sumPositive(values2) == 0);
assert(sumPositive(values3) == 0);
}
int main() {
test();
std::cout << "本关测试通过" << std::endl;
return 0;
}
测试说明¶
| 测试项 | 输入 | 预期结果 |
|---|---|---|
| 包含正数、负数和零 | {10, -5, 20, 0, -3} |
30 |
| 不包含正数 | {-1, -2, -3} |
0 |
| 空容器 | {} |
0 |
注意:条件应写为 value > 0。如果误写为 value >= 0,则元素 0 会被错误地纳入求和。
开始你的任务吧,祝你成功!