9

我试图对向量使用累积函数

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

4

2 回答 2

24

std::accumulate从某种意义上说,结果的类型是初始值的类型,而不是容器元素的类型,这有点偷偷摸摸!所以你的累加器产生ints。

要解决此问题,请累积到double

accumulate(A.begin(), A.end(), 0.0);
//                             ^^^^^^^ literal of type double
于 2011-11-22T13:39:07.910 回答
2

关键可能是你的表现如何 [...] //将值填充到 A ` 向量 A double 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

如果在保留之后您正在执行 a[0] = 1 这是错误的代码。你可能想要做的是说调整大小。

保留只给你后备内存容量,它实际上并没有创建有效的迭代器..所以 A.begin() 仍然等于 A.end()

查看代码更改,您知道整数和双精度数学之间的区别吗?term1 和 term 2 是积分的吗?

于 2011-11-22T13:35:05.913 回答