刚开始学习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?我不能在这里看到我的错误,感谢您的洞察力。
答案 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。