为什么突然放些这么水的东西?
我还是个C++小萌新,XD
【一 litTLE经验值】
1. C++里 自带pow(x,y) ,尤其是pow(x,0.333333)这种时候很有用。所以自己定义的快速幂最好别取名为pow。
2. c++的 /既有整除也有小数除。 记得用上(double) 或 加上.0
3. scanf("%c",&S) 若已经到文件末尾 scanf()=-1 否则scanf()=1 可以利用函数返回值判断文件末 这个函数返回的是scanf到的变量的个数
4. 用dev调试时,首先大部分电脑 应该都是用TDM-GCC 4.8.1 32-bit Debug 或者 是64-bit的 一般没啥能用release调试的。
而且,由于c++普遍的临时变量存在,调试时要把某个重名的变量删去再添加查看。。【日。】 而且要调试的话。不能直接放在磁盘目录下,会爆炸。要建文件夹。。
dev在调试到cin cout函数的时候会卡住,所以 我都用scanf printf
F7一行执行,F8进入当前行的函数(如果有)——与pascal相反。。。 按F5运行到下一个标红的行。
5. vector.size()是unsigned, -1<vector.size()是false,记得前面加(int)。
6. C++的sort 如sort(a+l,a+r+1,cmp); 若l>r是会出事的。。。记得if判掉(等于似乎是没事的)
7. 省选惨痛的经验。记得编译选项里开-Wall
8. 在devc++的编译选项里 加入 -Wl,--stack=100000000 可以防止系统栈爆炸
9. C++的define 很强大, 但是尤其是define lc (u<<1)时 不要忘了加括号 ,因为它是文本替换。(其实不论define什么都加括号是最稳的)
10. 莫名RE怎么办,目前遇到的调试到令人发疯的 原因有:BZOJ不能用C++的time函数 ,辣鸡OJ系统栈小的可怜(递归改成手写栈)。
11. 常用函数
unique的作用是“去掉”容器中相邻元素的重复元素,而返回值是去重之后的尾地址指针
lower_bound是返回[l,r)中第一个大于等于val的位置指针,而upper_bound是大于。
int a[4]={1,1,2,2};
int n=unique(a,a+4)-a; //n=2 ,剩余序列是 [0,2)
int t=lower_bound(a,a+4,2)-a; //t=2 ,第一个≥2的是a[2]
int t=upper_bound(a,a+4,-1)-a; //t=0 ,第一个>-1的是a[0]
int t=upper_bound(a,a+4,2)-a; //t=4 , 找不到则返回末尾地址
可以加cmp cmp定义为小于号(同sort). upper_bound(a+1,a+n+1,x,cmp)-a;
nth_element(a+1,a+k,a+n+1); //将第k小的元素放到第k位,其余的,左边比第k小,右边比第k大,但不一定有序。
12.二进制中挺有用的函数:

1 //返回前导的0的个数。
2 int __builtin_clz (unsigned int x)
3 //返回后面的0个个数,和__builtin_clz相对。
4 int __builtin_ctz (unsigned int x)
builti