【发布时间】:2021-02-20 09:24:51
【问题描述】:
当我编写下面的代码时,我得到一个负数 (-294967296)。
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
int main() {
vector<long long int> v={1000000000 , 1000000000 , 1000000000 , 1000000000};
cout<<"Sum of all the elements are:"<<endl;
cout<<accumulate(v.begin(),v.end(),0);
}
但是当我编写下面的代码时,我得到一个正数 (2000000000)
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
int main() {
vector<long long int> v={1000000000 , 1000000000};
cout<<"Sum of all the elements are:"<<endl;
cout<<accumulate(v.begin(),v.end(),0);
}
可能是什么原因?
【问题讨论】:
-
溢出。文字
0具有int类型,因此您对accumulate()的使用通过将所有long long int值添加到int来将它们相加。int(通常)可以表示较小范围的值 along long,溢出一个会给出未定义的行为。将0更改为0LL以使accumulate()给出long long int类型的结果。
标签: c++ vector stl accumulate