實際應用中僅用clear不足以清除容器額外分配出來的記憶體空間,需要借助
swap方法實現清除,測試**如下,測試的時候可以開啟任務管理器跟蹤觀察記憶體變化。
using namespace std;
vector v;
int main ()
{
for(int i=0; i<100000; i++)
v.push_back("haha");
v.clear();
// 此時再次檢查, 仍然占用54m
cout << "vector 的 容量為" << v.capacity() << endl;
vector(v).swap(v);
cout << "vector 的 容量為" << v.capacity() << endl;
return 0;
//參考文章
swap清除vector占用記憶體
vector與deque不同,其記憶體占用空間只會增長,不會減小。比如你首先分配了10,000個位元組,然後erase掉後面9,999個,則雖然有效元素只有乙個,但是記憶體占用仍為10,000個。所有空間在vector析構時 empty 是用來檢測容器是否為空的,clear 可以清空所有元素。但是即...
vector刪除元素與清除記憶體空洞
問題 stl中的vector容器常常造成刪除假象,這對於c 程式設計師來說是極其討厭的,effective stl 大師已經將之列為第17條,使用交換技巧來修整過剩容量。記憶體空洞這個名詞是網上的學者給出的,我覺得用來描述這個基本現象特別容易提醒自己vector刪除的這個陷阱。首先給出一段 35 v...
STL容器vector的記憶體問題
在stl的容器中,vector可以說是最容易理解和使用的容器了,以前使用陣列的時候,如果不確定有多少資料要儲存,就會預先分配乙個大的陣列,如果實際沒有用到那麼多,又會浪費很多的記憶體資源,如果不分配大的陣列又擔心不夠用,有了vector之後,這些問題再也不用擔心了,vector會動態的增長空間,當v...