1. 程式人生 > >容器中clear()和erase()的區別

容器中clear()和erase()的區別



1、vector::clear()函式的作用是清空容器中的內容,但如果是指標物件的話,並不能清空其內容,必須要像以下方法一樣才能達到清空指標物件的內容:

[cpp] view plaincopyprint?
  1. vector<int*> xx;  
  2. for(int it=0;it!=xx.size();++it)  
  3. {  
  4.     delete xx[it];  
  5. }  
  6. xx.clear();  
vector<int*> xx;
for(int it=0;it!=xx.size();++it)
{
	delete xx[it];
}
xx.clear();

但並不回收記憶體,但你可以通過swap()函式來巧妙的達到回收記憶體的效果:

[cpp] view plaincopyprint?
  1. xx.clear();  
  2. xx.swap(vector<int>());  
xx.clear();
xx.swap(vector<int>());


2、vector::erase()用於清空容器中的內容以及釋放記憶體,並返回指向刪除元素的下一個元素的迭代器。

erase:

erasearray: array 引數是要清除的陣列變數的名稱。 iterator erase( iterator pos );  //刪除pos指向的字元, 返回指向下一個字元的迭代器, iterator erase( iterator start, iterator end ); //刪除從start到end的所有字元, 返回一個
迭代器,指向被刪除的最後一個字元的下一個位置 basic_string &erase( size_type index = 0, size_type num = npos ); //刪除從index索引開始的num個字元, 返回*this. 引數index 和 num 有預設值, 這意味著erase()可以這樣呼叫:只帶有index以刪除index後的所有字元,或者不帶有任何引數以刪除所有字元. 原理是向前挪移一個位置。