累积算法不正确的总和

时间:2011-10-09 20:37:56

标签: c++

刚开始学习c ++中的算法。我的书提到了数字标题中定义的简单只读算法。它需要三个参数,第一个是指定一个或多个要求的元素的迭代器,第三个是求和的初始值。但是,当我尝试这样做时:

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;

int main() {

vector<int> numbers;

//Fill vector with numbers.
for (vector<int>::size_type i = 0; i != 10; i++) {
    numbers.push_back(i);
}

int sum = accumulate(numbers.begin(), numbers.end(), 1);
cout << numbers.size() << endl;
cout << sum << endl;

system("PAUSE");

return 0;
}

我的输出为:10,46。10加1怎么能是46?我不能在这里看到我的错误,感谢您的洞察力。

2 个答案:

答案 0 :(得分:10)

http://www.cplusplus.com/reference/std/numeric/accumulate/

你的向量中有0-9元素,其总和为45.作为累加器的偏移量,你加1。因此你得到了正确的结果46。

答案 1 :(得分:6)

您对算法的理解不正确。 std :: accumulate结果是元素的总和。现在,vector有0-9个数字。因此,0-9数字的总和为45,并且在结果中添加1(传递给算法的第三个参数为1),结果为46。