std::list::size():真正的 O(n)?
儘管有些人聲稱 std: :list::size() 具有線性複雜度,其複雜度的真相取決於實現。 C 標準沒有指定此函數的複雜性要求。
實作變體
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中文網其他相關文章!