2013-11-05 113 views
1

我最近被告知要提高一個for循環是方便使用遞減的循環,而不是增量環,像增量和減量的循環優化

For(int i=0; i<Limit;i++) 
{ 
//code 
} 

For(int i=Limit-1; i >=0; i--) 
{ 
//code 
} 

我沒有看到爲什麼有些人會推薦使用此,他們的論據是

「使用增量的for循環增加循環內部驗證的數量遞減採用循環驗證和處理時間減少」

+1

那麼有一個指令「分支如果等於0」,但老實說這是可怕的建議,如果你從這個開關有明顯的性能差異,我會驚呆了。 – jozefg

+0

+1 to @jozefg,尤其要記住,你真的應該使用迭代器來代替... – sashkello

回答

2

很多時候,你會看到這樣的事情:

for(int i = 0; i < list.length(); i++) { 
} 

但往往你可以做,而不是

for(int i = list.length(); i >= 0; i--) { 
} 

這樣,list.length()被調用一次。

當然,這也成爲了可能:

int length = list.length(); 
for(int i = 0; i < length; i++) { 
} 

但第一種方式是短。

很少有人想過用這樣一個微不足道的(通常)不重要的修復來解決真正的性能問題。如果由於某種原因.length()確實在吃CPU時間,我更喜歡最後一種方式。

+0

好吧,這裏很好用它 – cMinor

+0

我認爲循環中的'length()'應該被編譯器整理出來,只評估一次。否則,如果你想要去那裏,還有'--i'而不是'i - '......正如保羅所提到的那樣,當你想加快你的代碼時,這些都不是你要考慮的問題。 – sashkello