#include <iostream>
#include <vector>
#include <numeric>
#include <iterator>
using namespace std;
int main()
{
int N;
cin>>N;
long long int x,sum=0;
std::vector<long long int> v;
for(int i=0;i<N;i++)
{
cin>>x;
v.push_back(x);
}
/*vector<long long int>::iterator itr;
itr = v.begin();
for(itr=v.begin();itr<v.end();itr++)
sum += *itr;*/
sum = accumulate(v.begin(),v.end(),0);
cout<<sum;
return 0;
}
我的程序使用accumulate返回抽象值,但是如果我使用for循环,答案即将到来。
答案 0 :(得分:11)
std::accumulate
有一个小的陷阱,即你传递的初始值。人们很容易忽略这个值用于推导出也是返回类型的参数T
(并且返回类型不必然是容器的value_type
)。通过传递long long
作为初始值来修复它:
sum = accumulate(v.begin(),v.end(),(long long)0);
或对于偏执狂(抱歉只是开玩笑的原始演员真的不太好):
sum = accumulate(v.begin(),v.end(),0LL);