2017-03-05 88 views
0

我看到這個的方式,它們都具有相同的功能,除了std :: vector看起來更加靈活,所以何時需要使用數組,並且可以使用std ::只有矢量? 這不是一個新問題,原來的問題沒有我一直在尋找我應該使用std :: vector而不是數組

+0

如果需要一個 「動態」 數組,則['的std :: VECTOR'](http://en.cppreference.com/w/cpp/container/vector)是天然溶液。它通常應該是所有事物的默認容器。但是如果你想在編譯的時候(比如C風格的數組)創建的,但包裹在一個很不錯的C靜態大小的數組++對象然後['標準:: array'(http://en.cppreference.com/w/cpp/container/array)可能是更好的選擇。 –

+0

當你不需要'std :: vector'的靈活性時,使用一個數組(或'std :: array')是明智的。 – molbdnilo

+0

動態內存,堆? –

回答

2

一個有趣的事情是,當迭代器將與載體很多功能失效,即不能與數組的情況。注意:std::swapstd::array迭代器仍然會指向同一個點。

詳見: http://en.cppreference.com/w/cpp/container/array

陣列的優點很好的總結: https://stackoverflow.com/a/4004027/7537900

這一點似乎最有趣:

固定大小的數組可被直接嵌入到一個結構或對象, 它可以改善內存的局部性並減少堆的數量 需要的分配

沒有測試過,我不確定這是真的。

這裏是關於2D向量VS陣列其對在代碼廚師競爭編程的討論: https://discuss.codechef.com/questions/49278/whether-to-use-arrays-or-vectors-in-c

顯然存儲器是不是在2個維度中的2D矢量,僅在一個維度連續的,然而,在二維它是數組。

1

當使用std答案:向量,唯一的性能影響是當達到容量,爲內存必須搬遷到容納在堆上

因此,這裏在連續的存儲器空間物體的較大數量是兩者在問候靈活性和性能的總結:

的std ::陣列;重新分配是不可能的,因此堆內存的重新定位不會導致性能下降。

std :: vector;只有超過容量並重新分配時纔會影響性能。您可以使用保留(大小)來粗略估計您需要的最大對象數量。與std :: array相比,這允許更大的靈活性,但當然,如果超過保留空間,則必須重新分配內存。需要注意的

1

作爲一個經驗法則,你應該使用:

  • 一個std ::陣列如果在編譯時固定
  • 大小一個std ::向量是大小不固定在編譯時
  • 在他們的第一元件的地址的指針是需要低級別的訪問
  • 如果要實現一個(非標準)的原陣列容器

個標準集裝箱必須知道它們的大小,即使您將它們傳遞給其他的功能,什麼生數組不的能力,並有足夠的東西在C++代碼永遠不會使用原始陣列沒有具體原因。其中一個可能是需要低級別優化的瓶頸,但是隻有在確定瓶頸之後才能進行分析。而且您應該在真實條件下進行基準測試,以確定標準容器是否實際增加了過載。

唯一的好理由,我能想到的是,如果你實現一個特殊的容器。作爲標準集裝箱並不意味着導出,你只有兩種選擇,要麼有你的類包含一個標準集裝箱,並最終在一個容器中含有與各代表團的容器中無處不在,或模擬標準集裝箱(從井複製代碼知道實現),並專門化它。在這種情況下,您會發現自己直接管理原始數組。

相關問題