持续更新中..
/*
2019-08-22 upd:
原帖叫“OI学习中需要注意的”,今天看到觉得这个标题太sb了就改了
然后看了看内容感觉也比较sb就删了一大半
精简了内容,现在只记录c++的一些与玄学有关的特性,方便查阅,防止爆0
*/
大量莫名其妙的WA RE元凶集中于此
主要是C++的一些“特性”导致的考前必看!
左移右移如果涉及到long long一定给常数加上LL,否则会爆int e.g:1LL<<64
c++11的std多出许多全局函数,如next(),begin(),end(),你的程序不能使用这些变量名,否则直接CE爆零。但是默认的c++版本并非c++11,所以如果你使用了这些变量,编译器不会报错!在编译选项中加入-std=c++11就可以解决该问题。(然而也不是一劳永逸,c++11能通过编译的c++又不一定能过,,,总之建议都试一下保险)
建议开启全部编译警告,这样编译器能帮你找出部分bug。加上-O2会提示更多可能的错误
运算整数时不要信任任何stl!特别是cmath里面的数学函数,非常坑
比如pow()算整数时大概率误差
比如abs()整数linux编译过不了(可以引用cstdlib,里面有整数的abs)
如果遇到了一些完全无法解释的错误,比如说一cout就对注释掉就错之类的奇葩问题,八成是地址越界了,好好检查一下数组!
关于vector:其实常数很小,可以放心使用。但是一定不要嵌套写高维vector,这样搞常数大的飞起(尤其是写矩阵的时候)
cout很多时候比printf快得多。
multiset, multimap等可重STL的erase函数会删除多个元素,可用multiset::erase(multiset::find(x))替代。