【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);

 

转载于:https://www.cnblogs.com/VsKendo/p/9360908.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值