vector利用swap()函數進行內存的釋放,防止爆內存

vector利用swap()函數進行內存的釋放

首先,vector與deque不同,其內存佔用空間只會增長,不會減小。比如你首先分配了10,000個字節,
然後erase掉後面9,999個,則雖然有效元素只有一個,但是內存佔用仍爲10,000個。所有空間在vector析構時回收。

empty()是用來檢測容器是否爲空的,clear()可以清空所有元素。
但是即使clear(),所佔用的內存空間依然如故。如果你需要空間動態縮小,可以考慮使用deque。
如果非要用vector,這裏有一個辦法:
使用這種方法的前提是vector從前存儲了大量數據,比如10000000,經過各種處理後,
現在只有100條,那麼向清空原來數據所佔有的空間,
就可以通過這種交換技術swap技法
就是通過交換函數swap(),使得vector離開其自身的作用域,
從而強制釋放vector所佔的內存空間。

1 vector<int>a,b;
2 for(int i=1;i<=10;++i) a.push_back(i);
3 a.swap(b);//這樣a的空間大小就被釋放了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章