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