首頁 > 後端開發 > C++ > 所有實作 std::list::size() 真的都是 O(1) 嗎?

所有實作 std::list::size() 真的都是 O(1) 嗎?

Patricia Arquette
發布: 2024-11-21 01:39:12
原創
1003 人瀏覽過

Is std::list::size() Truly O(1) in All Implementations?

std::list::size():真正的 O(n)?

儘管有些人聲稱 std: :list::size() 具有線性複雜度,其複雜度的真相取決於實現。 C 標準沒有指定此函數的複雜性要求。

實作變體

  • Microsoft Visual Studio VC : 在舊版本中(例如VC6),size() 確實具有恆定的複雜性,因為它只是返回儲存的其內部資料結構中的大小。
  • GNU 編譯器集合(GCC): 歷史上(直到GCC 4.1.0),size() 使用O(n ) 透過迭代列表來計算數量的方法

GCC中的目前狀態

在C 11 中,C 標準要求所有標準的size() 操作容器,包括std::list,必須具有恆定的複雜度(O(1))。這是為了確保跨平台和實現的一致且高效的運行時行為。

Libstdc 中的實作

儘管有C 11 規定,size() 的實現libstdc(GCC 使用的標準庫)中的

GCC 4.8 版本中仍保持O(n) 。這樣做是出於效能原因,並最大限度地減少在清單結構中維護額外大小欄位的開銷。 更新:GCC 5.0 中的O(1) 實作

隨著GCC 5.0 的發布,size() 的實作

std::list

最終經過最佳化,在C 11 模式下實現了O(1) 複雜度。這是透過引入一個追蹤清單中元素數量的內部大小欄位來實現的,提供對大小資訊的恆定時間存取。 結論雖然

std::list::size() 的複雜度在過去是一個爭論的話題,當前的C 標準要求所有標準的複雜度為O(1)容器。 GCC 5.0 及更高版本中的實作遵循此要求,確保 size() 對於 std::list. 的高效且可預測的執行

以上是所有實作 std::list::size() 真的都是 O(1) 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板