天天看點

【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