首页 > 解决方案 > 为什么 std::accumulate 生成 705032704 作为输出而不是向量中元素的总和?

问题描述

输出是 705032704 而不是 5000000000。这是为什么呢?我认为std::accumulate会计算向量中元素的总和。

#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <string>
#include <iterator>
#include <queue>
#include <stack>
#include <numeric>

typedef long long ll;

int main()
{

    std::vector<ll> nums = {1000000000, 1000000000,1000000000,1000000000,1000000000};
    std::cout << std::accumulate(nums.begin(), nums.end(), 0);
    std::cin.ignore();

}

标签: c++algorithmstloverflowaccumulate

解决方案


整数溢出。

std::accumulate从第三个参数的类型推断求和变量的类型。由于您传入一个整数,因此 的结果std::accumulate也将是一个整数。

改为传递long long文字(来自 C++11):

std::accumulate(nums.begin(), nums.end(), 0LL);

推荐阅读