Codeforces比赛中遇到STL的大坑之accumulate
虽然C++永久了感觉很熟练,但是并没有什么卵用,随时都可能遇到可以吃掉剩下时间的迷のBUG。。。
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;
int main(){
vector<long long int> v(3,(long long int)1e9);
cout<<accumulate(v.begin(),v.end(),0)<<endl;
return 0;
}
根据经验认为我vector的元素都是long long int的,那么accumulate加起来自然是long long int类型的,然而事实。。。
-1294967296
ps: 编译器是Linux下的gcc 7.3.0
OTZ
正确做法
accumulate(v.begin(),v.end(),0LL)
居然是第三个初始值的参数类型决定结果类型。比赛要是遇到这种BUG那就一脸懵逼了。C语言大法好(手动滑稽)