问题
#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;
}
My program is returning abstract value using accumulate, but if I use the for loop, the answer is coming.
回答1:
std::accumulate
has a small pitfall that is the initial value that you pass. One can easily overlook that this value is used to deduce the parameter T
that is also the return type (and the return type is not necesarily the value_type
of the container). Fix it by passing a long long
as initial value:
sum = accumulate(v.begin(),v.end(),0LL);
来源:https://stackoverflow.com/questions/46691506/summation-of-vector-containing-long-long-int-using-accumulation