clear()
成員函數(shù)視為常量時間復(fù)雜度O(1)的。但是其實不然。我感覺可能是很多人都知道對于vector
而言,clear()
之后,修改了size()
的結(jié)果,不影響capacity()
的結(jié)果,因而得出clear()
只是修改了某個標(biāo)記,是常量時間復(fù)雜度的錯誤結(jié)論。其實C 標(biāo)準(zhǔn)明確指出不管是序列容器(比如vector
)還是關(guān)聯(lián)容器(比如unordered_map
)其clear()
成員函數(shù)都是線性時間復(fù)雜度O(n)的。因為只要執(zhí)行了clear()
就需要對其存儲的元素調(diào)用析構(gòu)函數(shù),這個析構(gòu)操作顯然是逐個析構(gòu)的。因而時間復(fù)雜度是O(n)。當(dāng)然在實踐中,也有個例。比如當(dāng)vector
存儲基本數(shù)據(jù)類型或POD類型(比如基本數(shù)據(jù)類型構(gòu)成的struct)的時候,由于其元素類型沒有析構(gòu)函數(shù)(也不需要析構(gòu)函數(shù)),加之vector
內(nèi)部連續(xù)存儲的特性,編譯器的實現(xiàn)是可以在常量時間完成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當(dāng)然僅限于
vector
存儲基本數(shù)據(jù)類型和POD類型的時候,編譯器可能有此優(yōu)化。如果vector
存儲的是其他類型的對象,或者是其他容器(比如list
、map
、unordered_map
)都是沒辦法做這個優(yōu)化的!所以在工程實踐中,我們要思考是否每次都需要及時的clear掉一個容器。比如在后臺服務(wù)中,有些容器類型的變量在命中某些條件下要進行clear()
,后續(xù)邏輯中判斷容器是空的,就不在用之進行某些邏輯(比如遍歷它,進行某種操作)。其實也可以用一個bool標(biāo)記來存儲后續(xù)是否需要遍歷該容器,待到本次請求的響應(yīng)返回給client之后,再來清理這個容器也不遲。當(dāng)然這種操作在容器的元素個數(shù)不多的時候是完全沒有必要的,會喪失一些可讀性。不過這種思考還是需要有的。如果元素過多的時候,或許可能是性能優(yōu)化的一個小點。auto
標(biāo)普500指數(shù)今年迄今為止下跌22.7%,但高盛(Goldman Sachs)策略師認為估值依然太高。摩根士丹利旗下的Morgan Stanley Wealth Management稱,面對高通脹環(huán)境下的利率大幅上升,股...
關(guān)鍵字: DMA MANAGEMENT 高通 ST(全球TMT2022年10月11日訊)數(shù)字網(wǎng)絡(luò)集成商STL宣布與Vocus Group合作開展西澳大利亞的地平線項目。在此次合作中,STL將為Vocus的國際資本網(wǎng)絡(luò)擴展計劃提供高強度光纖電纜。這項交易加強了STL與V...
關(guān)鍵字: 光纖網(wǎng)絡(luò) ST 電纜 GROUP馬斯克(Elon Musk)旗下的SpaceX公司已開始在日本提供運用衛(wèi)星通信技術(shù)的互聯(lián)網(wǎng)服務(wù)“Starlink(星鏈)”。日本是首個展開該服務(wù)的亞洲國家。該公司打算用該服務(wù)來抓住日本的山區(qū)和離島等確保通信手段的需求。官...
關(guān)鍵字: LINK ST SPACEX 互聯(lián)網(wǎng)