前言:这里每个坑都用了我超过1个小时,好多水题都是因为这些小坑卡了1个小时,贼气
没办法,coding能力比较弱。记下来这些教训,也让后人也看看,避开一些坑。不定期更新
最后更新日期:2018-08-01
1.cin\cout太慢导致超时
找了很久,发现要两个命令一起用。
ios::sync_with_stdio(false);
cin.tie(0);
2.变量定义的问题(全局,局部)
开始acm道路之后,我习惯了把很多变量放到全局变量,省去函数之间引用传递的麻烦,
需要初始化的时候用memset,这个做法方便但其实有不安全的地方。
那就是递归函数!因为在递归函数中,某个变量在某次递归中都有一个值,可是如果
将它声明为全局变量,那该变量就不随着递归函数而改变,从而导致同样的代码,
函数内使用局部变量的代码A了,而全局变量的WA了。
3.用优先队列的时候,“greater<typename>”与 “>”中间要有一个空格,这个坑只花了我3秒
4.在结构体、类中需要储存字符串的时候,可能导致的内存溢出错误(RE)
我们知道,可以用 string=char[]来初始化字符串。于是有次做字典树,用节点储存一个字符串,我在节点中声明了
个string变量,在insert的时候先new node(),然后直接让string=char[]导致RE。这是因为new的时候不知道
string占用的空间大小所以没分配(推断,应该是),解决方法,不要在node结构体/类中声明string,
而声明char* val; 在需要赋值的时候,使用以下代码来将字符串储存到节点中。
1 p->val = (char*)malloc((strlen(v)+1)*sizeof(char));//p是指向node的指针,v是待储存的字符串 2 strcpy(p->val,v);