一些经验

  1. C++中,运算符顺序比起Pascal有些奇葩,位运算符是在加减之后的;除<<、>>外,位运算符是在比较运算符后的。要注意,不然随时被坑。运算符顺序
  2. C++中,定义指针变量时,每个都要在前面打上*,不然会有编译错误。
  3. C++中用数组传参只是传递指针,Pascal是整个传递。要是在Pascal中用函数打高精度会很恶心。
  4. C++自带的东西总会比手打慢,但就是好用。
  5. 打高精度时:
    1. 每个运算用函数代替,最好重载运算符。有的人直接将高精度嵌进主程序里,太丑。打正常函数也太丑,重载运算符好看。
    2. 打重载运算符时,最好重载+=、-=、*=、/=等,不然会多一个O(高精度类型大小)的赋值操作。
    3. 养成压位的好习惯,尽量将位压多。
    4. 打压位高精度输出时,用不着判断前导0,因为printf中”%0md”(”%0mlld”)表示输出m位,不够的位补0。
  6. 在C++中,可以用自带的排序、堆、平衡树、bitset,但是不要常用自带队列、栈,因为它们本身很好打,用了之后还会慢(动态开空间,虽然说平衡树也是,但平衡树难打)。
  7. 队列尽量不开循环,会比普通的慢一些(有一题我就将循环队列开成普通队列就AC了)。如果开循环,有些人的head和tail每加一个就模一次。模的速度慢,建议改为and一个2^k-1的数。
  8. 对于一些题目,要多次用到bool数组,有的人每次都将其用memset清0。实际上这是很慢的。可以用整数代替,用那个整数加1代替清0操作。
  9. 普及一下memset,这实际上是以1B为一个单位填充。若填的是整型,则填127为0x7f7f7f7f(开头为0x表示是16进制)。
  10. C++中,常常一个不小心就有变量与头文件里的变量重了。如果那里有namespace还好运,不然就会编译错误,甚至本地不会提醒。所以建议在一些不确定的变量加前缀或后缀。
  11. 一些程序里尽量别用指针,虽然好看,但常常会RE。
  12. 尽量别用getchar()来读入,因为一些奇怪的原因,交上去有时是会错的。
  13. Dev-C++的bug太多了,比如说调试结构体数组。所以建议使用输出调试。

你可能感兴趣的:(一些经验)