显然我需要一个求和函数,累积不会削减它
我需要创建程序 - 一个向量 - 用户可以指定的n个元素 - sum函数只能求和POSITIVE元素,即使用户也可以输入负数元素......
在computeSum函数中,我还需要为整个组添加“成功”
computeSum (dataVec, howMany, total, sucess);
并为输入的人创建一个参数 - 所有负数但想要求和但不能,因为没有正数
if (success) {
cout << "The sum is " << total << endl;
}
else {
cerr << "Oops, you cannot add these elements.";
}
所以这就是我得到的
#include <iostream>
#include <vector> // need this in order to use vectors in the program
using namespace std;
int main()
{
vector<double> dataVec;
double i, n, howMany, total;
cout << "How many numbers would you like to put into the vector?";
cin >> n;
dataVec.resize(n);
for(vector<double>::size_type i=0;i < n;i++)
{
cout << "Enter the numbers: \n";
cin >> dataVec[i];
}
cout << "How many POSITIVE numbers would you like to sum?";
cin >> howMany;
cout << computeSum (dataVec, howMany, total);
}
double computeSum (vector<double> &Vec, howMany, total)
{
double total =0;
for(int i=0;i < howMany;i++)
total+=Vec[i];
return total;
}
我似乎也难以编译 - 在int main()中没有理解computeSum();如何在computerSum()中不理解任何事情;并且在一个gloabl范围total()和howMany()未声明(我猜这意味着我需要全局decalre ???)
答案 0 :(得分:4)
事实上,accumulate
将“剪切”,并使用适当的函子仅考虑正值:
int sum_positive(int first, int second) {
return first + (second > 0 ? second : 0);
}
…
std::accumulate(data.begin(), data.begin() + how_many, 0, sum_positive);
答案 1 :(得分:1)
登上我的爱好马:Boost Range Adapters。与我达成甜蜜点
#include <boost/range/adaptors.hpp>
#include <boost/range/numeric.hpp>
bool isnatural(int i) { return i>=0; }
using namespace boost::adaptors;
int main(int argc, char** args)
{
static const int data[] = { -130, -1543, 4018, 5542, -4389, 15266, };
std::cout << "sum: " << boost::accumulate(data | filtered(isnatural), 0) << std::endl;
return 0;
}
输出:
总和:24826
使用C ++ 11 awesomeness 1 spice :
std::cout << "sum: " << boost::accumulate(data
| filtered([] (int i) { return i>=0; }), 0) << std::endl;
<子> 子>
1 :说实话,我真的很讨厌lambda语法的笨拙:
- 必须指定参数类型始终
- 必须拼写退货声明 对于这种情况,似乎是
filtered([] (i) { i>=0 })
可以由编译器弄清楚。好吧,也许在c ++ 22 :)
答案 2 :(得分:0)
您的computeSum()
函数必须出现在源文件中main()
函数的上方,才能在范围内。同样在computeSum()
函数签名中,您还没有为howMany
和total
变量指定类型。我猜它们应该是double howMany
和double total
?