要避免你的vector持有它不再需要的記憶體

2021-04-18 01:38:27 字數 578 閱讀 4294

[以下內容出自]

要避免你的vector持有它不再需要的記憶體,你需要有一種方法來把它從曾經最大的容量減少到它現在需要的

容量。這樣減少容量的方法常常被稱為「收縮到合適(shrink to fit)」。

收縮到合適很容易實現,但**——我該怎麼說?——比直覺的要少。讓我演示給你看,然後我會解釋它是怎麼工作的。

這是你怎麼修整你的競爭者vector過剩容量的方法:

vector(contestants).swap(contestants);

表示式vector(contestants)建立乙個臨時vector,它是contestants的乙份拷貝:vector的拷貝建構函式

做了這個工作。但是,vector的拷貝建構函式只分配拷貝的元素需要的記憶體,所以這個臨時vector沒有多餘的

容量。然後我們讓臨時vector和contestants交換資料,這時我們完成了,contestants只有臨時變數的修整過的容

量,而這個臨時變數則持有了曾經在contestants中的發脹的容量。在這裡(這個語句結尾),臨時vector被銷

毀,因此釋放了以前contestants使用的記憶體。瞧!收縮到合適。

談vector的特殊性 為什麼它不是STL容器

起因是這樣的,昨天在查c 11的range base for loop相關的東西的時候,看到說vector bool 是乙個proxy iterator,非常的特殊,於是就好奇的研究了一下。首先vector bool 並不是乙個通常意義上的vector容器,這個源自於歷史遺留問題。早在c 98的時候...

要的就是你 this

人啊,認識你自己吧!這是太陽神阿波羅神廟的銘文,刻於西元前900年。自己是誰?但凡做事情 想東西都需要乙個主體,這個主體往往就是自己。當然,人們不需要清楚自己,也可以做事情 想東西。this是啥?但凡取數值 調方法都需要乙個主體,這個主體往往就是this。同樣,開發者也許並不了解,但同樣能取數值 調...

android開發要避免的那些坑

flag 解釋start sticky 如果service程序被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent物件。隨後系統會嘗試重新建立service,由於服務狀態為開始狀態,所以建立服務後一定會呼叫onstartcommand intent,int,int 方法。如果...