我试图将累积函数用于向量
vector <double> A;
double B = 0;
A.reserve(100);
for(itr = 0; itr < 210; itr++)
{
term1 = pow(r[itr], 12);
term1 = 1/term1;
term2 = pow(r[itr], 6);
term2 = 2/term2;
A.push_back(term1 - term2);
}
B = accumulate(A.begin(), A.end(), 0);
然而,我总是得到B = 0,而A有非零值
答案 0 :(得分:24)
std::accumulate
有点偷偷摸摸,因为结果的类型是初始值的类型,而不是容器元素的类型!所以你的累加器产生int
s。
要解决此问题,请累积到double
:
accumulate(A.begin(), A.end(), 0.0);
// ^^^^^^^ literal of type double
答案 1 :(得分:2)
关键可能是你的做法[...] //将值填入A中 ` 矢量A. 双B = 0;
A.reserve(100);
A.push_back(1);
A.push_back(2);
B = accumulate(A.begin(), A.end(), 0);
return 0;
解析B = 3.0
如果在保留之后你正在做[0] = 1 这是糟糕的代码。 您可能想做的事情就是调整大小。
reserve只为你提供后备内存容量,它实际上并没有创建有效的迭代器..所以A.begin()仍然等于A.end()
查看代码更改,您知道整数和双数学之间的区别吗? term1和term 2是否为积分?