2014-02-06 45 views
0

我想知道哪個是最快的一般用途。因此,而不是push_back()我們可以使用下面的代碼爲數組。我認爲數組更快,但我不確定這一點。向量與陣列(速度)

int *p; 
p = new int[5]; 
for(int i=0;i<5;i++) 
    *(p+i)=i; 

// realloc 
int* temp = new int[6]; 
std::copy(p, p + 5, temp); 
delete [] p; 
p = temp; 
+4

將探查器放在上面。 :) – Almo

+0

只需使用std :: vector - 已經實現了 –

+2

一般來說,一個「真正的」C數組比任何對象都快。 (但當然,快速訪問並不是選擇構造的唯一標準。) –

回答

3

std::vector的實現方式通常針對一般用途進行優化。對於任何特定情況,本機數組的性能會更好或相同,但如果您事先並不知道確切的使用特性,則矢量通常會有不錯的表現,並且比本地數組還要好。例如,在上面的代碼中,您明確地重新分配內存,而矢量實現可能已經分配了足夠的內存(例如,使矢量至少爲一個緩存行)。

+0

讓我們不要忘記,通過一個好的'allocator',一個'std :: vector'可能會以幾乎0的努力獲得真正有趣的性能,特別是池分配器。 – user2485710