當前位置:首頁 > 公眾號精選 > CPP開發(fā)者
[導讀]STL中稍不注意會產生性能開銷的地方STL容器的clear的時間復雜度不是O(1)可能很多人都不在意,在使用STL容器的時候,潛意識里面將clear()成員函數視為常量時間復雜度O(1)的。但是其實不然。我感覺可能是很多人都知道對于vector而言,clear()之后,修改了si...

STL中稍不注意會產生性能開銷的地方

STL容器的clear的時間復雜度不是O(1)

可能很多人都不在意,在使用STL容器的時候,潛意識里面將clear()成員函數視為常量時間復雜度O(1)的。但是其實不然。我感覺可能是很多人都知道對于vector而言,clear()之后,修改了size()的結果,不影響capacity()的結果,因而得出clear()只是修改了某個標記,是常量時間復雜度的錯誤結論。

其實C 標準明確指出不管是序列容器(比如vector)還是關聯容器(比如unordered_map)其clear()成員函數都是線性時間復雜度O(n)的。因為只要執(zhí)行了clear()就需要對其存儲的元素調用析構函數,這個析構操作顯然是逐個析構的。因而時間復雜度是O(n)。

當然在實踐中,也有個例。比如當vector存儲基本數據類型或POD類型(比如基本數據類型構成的struct)的時候,由于其元素類型沒有析構函數(也不需要析構函數),加之vector內部連續(xù)存儲的特性,編譯器的實現是可以在常量時間完成clear()的。

Linear in size(destructions). This may be optimized to constant complexity for trivially-destructible types(such as scalar or PODs), where elements need not be destroyed

http://www.cplusplus.com/reference/vector/vector/clear

當然僅限于vector存儲基本數據類型和POD類型的時候,編譯器可能有此優(yōu)化。如果vector存儲的是其他類型的對象,或者是其他容器(比如listmap、unordered_map)都是沒辦法做這個優(yōu)化的!

所以在工程實踐中,我們要思考是否每次都需要及時的clear掉一個容器。比如在后臺服務中,有些容器類型的變量在命中某些條件下要進行clear(),后續(xù)邏輯中判斷容器是空的,就不在用之進行某些邏輯(比如遍歷它,進行某種操作)。

其實也可以用一個bool標記來存儲后續(xù)是否需要遍歷該容器,待到本次請求的響應返回給client之后,再來清理這個容器也不遲。

當然這種操作在容器的元素個數不多的時候是完全沒有必要的,會喪失一些可讀性。不過這種思考還是需要有的。如果元素過多的時候,或許可能是性能優(yōu)化的一個小點。

auto替代手寫類型

比如在基于范圍的循環(huán)中盡量使用auto
本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

騰盛博藥生物科技有限公司公布了兩項在美國健康志愿者中開展的評估長效BRII-732和BRII-778的1期研究最新數據,這兩種在研候選藥物旨在用于治療人類免疫缺陷病毒(HIV)感染。兩項研究結果均表明,BRII-732和...

關鍵字: FIR ST RS

標普500指數今年迄今為止下跌22.7%,但高盛(Goldman Sachs)策略師認為估值依然太高。摩根士丹利旗下的Morgan Stanley Wealth Management稱,面對高通脹環(huán)境下的利率大幅上升,股...

關鍵字: DMA MANAGEMENT 高通 ST

奈飛(Netflix)今年早些時候從數據中看到了一個令人擔憂的信號:用戶訪問該流媒體服務的頻率下降了。該公司對其用戶在四周時間里觀看其內容的天數進行了跟蹤,并擔心訪問頻率的下降會增加用戶取消訂閱的可能性。在發(fā)現這一問題之...

關鍵字: 信號 流媒體 TI ST

鄭州2022年10月17日 /美通社/ -- 近日,《福布斯》發(fā)布了"2022年全球最佳雇主榜單"(The World's Best Employers 2022),中國平安再度上榜并排名全...

關鍵字: 福布斯 ST TI BSP

蘇州2022年10月17日 /美通社/ -- 開拓藥業(yè)(股票代碼:9939.HK),一家專注于潛在同類首創(chuàng)和同類最佳創(chuàng)新藥物研發(fā)及產業(yè)化的生物制藥公司,宣布其自主研發(fā)、潛在同類首創(chuàng)的福瑞他恩(KX-826)治療痤瘡的中國...

關鍵字: ST FDA 代碼 ADI

(全球TMT2022年10月11日訊)數字網絡集成商STL宣布與Vocus Group合作開展西澳大利亞的地平線項目。在此次合作中,STL將為Vocus的國際資本網絡擴展計劃提供高強度光纖電纜。這項交易加強了STL與V...

關鍵字: 光纖網絡 ST 電纜 GROUP

馬斯克(Elon Musk)旗下的SpaceX公司已開始在日本提供運用衛(wèi)星通信技術的互聯網服務“Starlink(星鏈)”。日本是首個展開該服務的亞洲國家。該公司打算用該服務來抓住日本的山區(qū)和離島等確保通信手段的需求。官...

關鍵字: LINK ST SPACEX 互聯網

Meta在年度大會上發(fā)布新款VR頭盔Quest Pro,售價1500美元。Quest Pro使用手機內部和周圍的攝像頭來捕捉面部運動,它可以實時將這些捕捉到的信息應用于用戶的頭像和表情。 (全球企業(yè)動態(tài))...

關鍵字: VR ST 手機 攝像頭

Meta Quest Pro定于本月25日面市,定價1500美元。零售包裝內含頭戴裝置,Quest Touch Pro手柄,充電底座,壓感筆尖(手柄附件),部分遮光罩(另有全遮光罩可選)。開發(fā)單位宣稱Meta Quest...

關鍵字: ST AN 傳感器 GB

金融科技公司Airwallex空中云匯宣布完成1億美元E2輪融資?,F有投資方Square Peg、Salesforce Ventures、紅杉中國、Lone Pine Capital、和暄資本、1835i和騰訊參與了本輪...

關鍵字: AIR API 騰訊 ST

CPP開發(fā)者

234 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉