C ++向量累积

时间:2011-11-22 13:29:08

标签: c++ vector accumulate

我试图将累积函数用于向量

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有非零值

2 个答案:

答案 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是否为积分?