【ACM】c++在oj上做题时遇到过的坑

前言:这里每个坑都用了我超过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);

 

posted @ 2018-07-24 16:42  VsKendo  阅读(379)  评论(0编辑  收藏  举报