2011-03-07 60 views
6

可能重複:
Preincrement faster than postincrement in C++ - true? If yes, why is it?
Is there a performance difference between i++ and ++i in C++?STL迭代器:前綴增量更快?

我被告知,使用STL和它的迭代器的時候,我應該使用++iter,而不是iter++

我引述:

因爲它只能是快,慢從未

這是真的嗎?

+0

重複:http://stackoverflow.com/questions/2020184/preincrement-faster-than-postincrement-in-c-tr​​ue-if-yes-why-is-it(et al ) – gregg

回答

10

是的。一般情況是這樣。後綴增量的任務是保存並返回迭代器的舊值。這需要時間和精力,這通常會讓它變慢。

對於實現傳統的前/後語義的所有重載增量/減量運算符,通常都是如此。

此主題被打死。在這裏做一個關於「前綴後綴」的搜索,以獲得大量更詳細的解釋。

+2

一個好的優化器通常可以刪除舊值的複製,尤其是在未使用時。所以「慢」應該是「不快」。 –

+0

@波佩爾森:這就是爲什麼我說「一般」。 – AnT

+1

不,你說「通常比較慢」,我說「一般不會更快」。 :-)。問題是:爲什麼使用後增量,如果不是更快?沒有理由! –

5

你可以在這個例子創建一個臨時看到,在後綴......這慢於前綴,其中沒有創建高級對象

// Define prefix increment operator. 
Point& Point::operator++() 
{ 
    _x++; 
    _y++; 
    return *this; 
} 

// Define postfix increment operator. 
Point Point::operator++(int) 
{ 
    Point temp = *this; 
    ++*this; 
    return temp; 
} 

++ ITER國際熱核實驗堆相比更加++更快,因爲不創建對象的副本