」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 現代 C++ 實作中的 std::list::size() 真的是 O(1) 嗎?

現代 C++ 實作中的 std::list::size() 真的是 O(1) 嗎?

發佈於2024-11-17
瀏覽:351

Is `std::list::size()` Truly O(1) in Modern C   Implementations?

在現代實作 std::list::size() 真的是 O(n) 嗎?

最近,一些開發人員建議std::list::size() 具有線性時間複雜度 (O(n))。但是,根據 C 標準,複雜性沒有定義,並且可能會根據實現而變化。

在 C 標準的早期版本 (C 03) 中,建議 size() 操作具有恆定的複雜度(O(1))。然而,隨著 C 11 的引入,它成為所有標準容器的要求。 C 11 標準的表 96 明確指出 .size() 對於所有容器應該具有恆定的複雜度。

歷史上,GCC 的libstdc 函式庫使用std::distance(begin ) 實作複雜度為O(n) 的size() (), end()),如你所引用的部落格文章所述。然而,在 C 11 模式下,這種行為改變了:

size_type
size() const _GLIBCXX_NOEXCEPT
{ return __size_alloc_.first(); }

_LIBCPP_INLINE_VISIBILITY
const size_type& __sz() const _NOEXCEPT
    {return __size_alloc_.first();}

在 GCC 5.0 及更高版本中,size() 函數使用內部資料結構來追蹤元素數量,有效地使操作為 O(1)。這符合所有標準容器的 C 11 要求。

值得注意的是,一些利基用例可能仍然會導致 size() 的 O(n) 複雜性,但對於絕大多數用戶來說,操作應該是恆定時間。

最新教學 更多>
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-17
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-17
  • 如何在 Keras 中實現自己的損失函數?
    如何在 Keras 中實現自己的損失函數?
    Keras 中的自訂損失函數實作在 Keras 中,可以實現自訂損失函數來滿足特定的訓練要求。其中一個函數是骰子誤差係數,它測量真實標籤和預測標籤之間的重疊。 要在 Keras 中建立自訂損失函數,請依照下列步驟操作:1。實作係數函數骰子誤差係數可以寫成:dice coefficient = (2 ...
    程式設計 發佈於2024-11-17
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-17
  • Go如何在沒有傳統機制的情況下實現多型?
    Go如何在沒有傳統機制的情況下實現多型?
    探討Go語言中的多態性在物件導向程式設計中,多態性允許物件根據其類別表現出不同的行為。但在Go中,多態性的概念並不是傳統意義上的實現。讓我們深入探討一下這背後的原因,探討如何在 Go 中實現類似的功能。 為什麼 Go 缺乏傳統的多態性Go 不是傳統的物件導向語言。它採用了不同的方法,使用:組合:由其...
    程式設計 發佈於2024-11-17
  • 如何在Java中正確透過套接字傳輸檔案?
    如何在Java中正確透過套接字傳輸檔案?
    Java 透過套接字傳輸檔案:傳送和接收位元組數組Java 透過套接字傳輸檔案:傳送和接收位元組數組在Java 中,透過套接字傳輸檔案涉及將檔案轉換為位元組數組,透過套接字發送它們,然後在接收端將位元組轉換回檔案。本文解決了 Java 開發人員在實作此文件傳輸功能時遇到的問題。 伺服器端問題byte...
    程式設計 發佈於2024-11-17
  • 如何在 JavaScript 中格式化數字以顯示最少的小數位數?
    如何在 JavaScript 中格式化數字以顯示最少的小數位數?
    在JavaScript 中格式化數字關於在JavaScript 中格式化數字的查詢,您可以利用內建函數toLocaleString() 和minimumFractionDigits選項。 toLocaleString() 方法可讓您根據使用者的區域設定或指定的區域設定格式化數字。透過將minimum...
    程式設計 發佈於2024-11-17
  • 如何在 Go 中將數字轉換為字母?
    如何在 Go 中將數字轉換為字母?
    在Go 中將數字轉換為字母了解了將數字轉換為字母的需要,讓我們探索在Go 中實現這一目標的各種方法.數字到符文的轉換一種簡單的方法是將數字添加到常量'A' - 1,其中每個數字相加代表字母表中的一個字母。例如,加 1 得到“A”,加 2 得到“B”。 func toChar(i in...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 中提取不含副檔名的檔名?
    如何在 PHP 中提取不含副檔名的檔名?
    在PHP 中提取不帶擴展名的文件名使用神奇常數__FILE__ 可以輕鬆獲取PHP 中當前執行腳本的文件名。但是,如果您需要提取不含副檔名的檔案名,例如“.php”後綴,則過程略有不同。 basename() 解決方案:若要使用basename()函數刪除副檔名,您可以:basename(__FIL...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 和 MySQL 中同步時區?
    如何在 PHP 和 MySQL 中同步時區?
    在PHP 和MySQL 中同步時區您正在開發一個需要使用PHP date() 函數在MySQL 中儲存日期的應用程式。有必要使用 NOW() 在 MySQL 中比較這些日期來計算時間差異。但是,PHP date() 函數使用 PHP 中定義的時區,而 NOW() 使用 MySQL 伺服器中配置的時區...
    程式設計 發佈於2024-11-17
  • 如何使用準備好的語句在 PHP MySQLi 中準備安全更新查詢?
    如何使用準備好的語句在 PHP MySQLi 中準備安全更新查詢?
    如何為更新查詢準備語句為了增強使用PHP MySQLi 查詢更新資料庫時的資料安全性,建議採用準備好的聲明。雖然 PHP 文件提供了有關 bind_param() 的信息,但它缺少特定於更新查詢的範例。 讓我們深入研究如何為更新查詢制定準備好的語句:準備查詢語句:將更新查詢中的所有變數替換為問題標記...
    程式設計 發佈於2024-11-17
  • 如何將文字保留在圓角 Div 內?
    如何將文字保留在圓角 Div 內?
    確保文字保留在圓角Div 內在創建具有引人入勝的視覺元素的網頁時,通常會遇到圓角的需求無縫整合文字內容的div。然而,預設情況下,圓形 div 內的文字往往表現為其容器是方形的,超出了指定的圓形邊界。 為了解決此問題,有許多解決方案,每種解決方案都有自己的優點和優勢限制:1。 Shape-Outsi...
    程式設計 發佈於2024-11-17
  • **擴充語法與其餘參數:ES2015 中的差異是什麼?
    **擴充語法與其餘參數:ES2015 中的差異是什麼?
    擴展語法與剩餘參數:揭開ES2015 中的差異瀏覽ES2015 中擴展語法和剩餘參數的細微差別可能是一個想法-令人難以置信的努力。在本指南中,我們將剖析它們在 JavaScript 不斷發展的格局中的對比角色。 理解擴展語法:從一到多擴展語法(以' 表示) ...')允許我們將可迭代...
    程式設計 發佈於2024-11-17
  • 為什麼我的 Tomcat 伺服器顯示「所需的幾個連接埠已在使用中」?
    為什麼我的 Tomcat 伺服器顯示「所需的幾個連接埠已在使用中」?
    Tomcat 伺服器連接埠衝突:解決錯誤「Several Ports required are Already in Use」嘗試在Tomcat 上啟動JSP 程式時Eclipse 中,使用者可能會遇到錯誤,指出Tomcat 所需的多個連接埠已在使用中。出現此問題的原因是存在另一個 Tomcat 實...
    程式設計 發佈於2024-11-17
  • 如何在 Java 中確定文件建立日期?
    如何在 Java 中確定文件建立日期?
    在Java 中確定文件創建日期:揭示文件元數據確定文件的創建日期可能是一條有價值的信息,尤其是組織和管理文件時。 Java 提供了存取此元資料的機制,只要底層檔案系統支援即可。 Java 中的檔案建立日期Java NIO(新輸入/輸出)提供用於擷取檔案元資料的選項,包括建立時間。透過利用 Basic...
    程式設計 發佈於2024-11-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3