簡體   English   中英

c++ 矢量效率

[英]c++ Vector efficiency

該標准要求向量實現可以在運行時有效地添加元素。 因為向量有效地增長,所以通常沒有必要——並且可能導致更差的性能——定義一個特定大小的向量。 此規則的例外是所有元素實際上都需要相同的值。 如果需要不同的元素值,通常更有效的是定義一個空向量並添加元素作為我們需要在運行時知道的值。

閱讀 C++ prime(C++ 11 版)。 有人可以向我解釋為什么會發生這種情況。 我的意思是想象我們需要在 std::vector 中添加 100 萬個不同的數字。 為什么如果我將它們 push_back 放入未定義近似大小的向量中,將是比定義大小更“有效”的方式 我的意思是我對向量的大小和容量有一個模糊的理解,我相信每次 Vector 超過它的容量時,所有元素都會被復制到更大的數組中(n * 2 或 n * 1.5 附近的某個地方)......

對於 int 等簡單類型,聲明具有所需元素數量的向量可能比使用push_back更快,因為向量不需要進行任何重新分配。 但是,對於具有構造函數的復雜類,這樣做會默認構造所有元素,然后覆蓋它們,浪費時間。

在這兩種情況下,最好的解決方案是使用reserve一次性為所有元素分配空間,而不構建這些元素。 然后您可以使用push_back而不必擔心重新分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM