创建一个求和函数以仅对向量的一部分求和
Posted
技术标签:
【中文标题】创建一个求和函数以仅对向量的一部分求和【英文标题】:creating a sum function for summing only part of a vector 【发布时间】:2011-09-18 17:59:55 【问题描述】:显然我需要一个 sum 函数,并且累积不会削减它
我需要创建程序 - 一个向量 - 用户可以指定 n 个元素 - 并且 sum 函数只能对正元素求和,即使用户也可以输入负元素...
在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;
我似乎也无法编译这个 - computeSum() 在 int main(); 中没有被理解;在computerSum() 中没有理解howMany;并且在全局范围内,total() 和 howMany() 未声明(我想这意味着我需要在全局范围内进行 decalre ???)
【问题讨论】:
【参考方案1】:事实上,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);
【讨论】:
我认为,您要使用的重载需要4
参数。【参考方案2】:
骑上我的爱好马:Boost Range Adaptors。和我一起达到甜蜜点
#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 awesomeness1spice:
std::cout << "sum: " << boost::accumulate(data
| filtered([] (int i) return i>=0; ), 0) << std::endl;
1:说实话,我真的很讨厌 lambda 语法的笨拙:
必须指定参数类型总是 必须将返回语句拼写为 对于这种情况,似乎filtered([] (i) i>=0 )
可以由编译器计算出来。好吧,也许在 c++22 中:)
【讨论】:
【参考方案3】:您的computeSum()
函数必须出现在源文件中的main()
函数上方,它才能在范围内。同样在您的 computeSum()
函数签名中,您没有为 howMany
和 total
变量指定类型。我猜他们应该是double howMany
和double total
?
【讨论】:
"您的computeSum()
函数必须出现在源文件中您的 main() 函数上方,它才能在范围内。" -- 不正确。正确的是computeSum()
的定义或声明需要出现在main()
之前。以上是关于创建一个求和函数以仅对向量的一部分求和的主要内容,如果未能解决你的问题,请参考以下文章