含有长long int的向量的累加

时间:2017-10-11 14:57:28

标签: c++ accumulate

#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循环,答案即将到来。

1 个答案:

答案 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);