2010-03-31 33 views
1

我很熟悉STL向量(和其他容器)的性能保證,但是我似乎無法找到關於普通數組的任何具體內容。陣列性能問題

指針算術和[]方法是恆定的還是線性的?

回答

9

他們是恆定的時間。 (與vector相同。)

當你說a[b]時,它變成*(a + b)。 (指針算術)加法和解引用都是常量時間。

當添加到指針的整數,它的動作,許多元件在:

T* p; size_t i; 

T* q = p + i; // same as: 
T* q = reinterpret_cast<T*>(reinterpret_cast<char*>(p) + i * sizeof(T)); 

每個操作中存在一定的時間。

+0

愚蠢的問題 - 總操作的恆定時間?那麼(pObj + 1)和(pObj + 10)會花費相同的時間? – Konrad 2010-03-31 15:25:42

+1

@Konrad是的 - 指針運算只是算術運算,1 + 1與1 + 10的運算時間相同。 – 2010-03-31 15:28:01

+0

謝謝,我以爲是的,但是腦中有一個失敗的時刻。謝謝! – Konrad 2010-03-31 15:32:41

0

指針的運算是恆定的 - 它通常是一個單一的乘法和基礎的補充。 []也是一種指針算法。

2

矢量實際上是一個數組的包裝,所以它們應該提供相同的性能保證。