容器中clear()和erase()的區別
阿新 • • 發佈:2019-01-10
[cpp]
view plaincopyprint?
迭代器,指向被刪除的最後一個字元的下一個位置
basic_string &erase( size_type index = 0, size_type num = npos ); //刪除從index索引開始的num個字元,
返回*this.
引數index 和 num 有預設值, 這意味著erase()可以這樣呼叫:只帶有index以刪除index後的所有字元,或者不帶有任何引數以刪除所有字元.
原理是向前挪移一個位置。
1、vector::clear()函式的作用是清空容器中的內容,但如果是指標物件的話,並不能清空其內容,必須要像以下方法一樣才能達到清空指標物件的內容:
[cpp] view plaincopyprint?- vector<int*> xx;
- for(int it=0;it!=xx.size();++it)
- {
- delete xx[it];
- }
- xx.clear();
vector<int*> xx;
for(int it=0;it!=xx.size();++it)
{
delete xx[it];
}
xx.clear();
但並不回收記憶體,但你可以通過swap()函式來巧妙的達到回收記憶體的效果:
- xx.clear();
- 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的所有字元, 返回一個