雖然人們普遍認為std::vector 的操作與數組類似,但最近的測試對這一概念提出了挑戰。在本文中,我們將研究 std::vector 和普通數組之間的效能差異,並闡明根本原因。
為了進行測試,實施了一個基準測試,其中涉及重複建立和修改大型陣列像素物件。測試使用兩種實作進行:std::vector 和模擬普通數組的原始指標。
初步結果顯示存在顯著的效能差距,std::vector 比普通數組慢約 3-4 倍。
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
這個令人驚訝的發現促使我們對程式碼進行更仔細的檢查。人們發現,明顯的性能差異源於這樣一個事實:修改向量中的元素需要訪問它兩次:一次調整向量大小,再次初始化元素。
透過優化向量實作來初始化每個元素僅一次元素,我們就獲得了顯著提高的性能:
UseVector completed in 2.216 seconds
此修改後的性能現在可與普通數組相媲美。值得注意的是,觀察到的細微差異可能歸因於與底層資料結構無關的因素。
總之,雖然 std::vector 是一種方便且通用的資料結構,但其效能可能會受到因素的影響例如元素初始化和存取的方式。當效能至關重要時,明智的做法是仔細考慮具體要求並探索替代選項,例如普通數組或其他資料結構。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3