C++刪除元素的函式總結
阿新 • • 發佈:2019-01-03
在C++中,刪除物件元素的方法可以用remove函式、erase函式、resize函式等。
1、remove函式
remove函式在STL中的原始碼如下:
template <class InputIterator, class OutputIterator, class T> OutputIterator remove_copy ( InputIterator first, InputIterator last, OutputIterator result,const T& value ) { for ( ; first != last; ++first) if (!(*first == value)) *result++ = *first; return result; }
如果lst是一個list<int>的物件,則呼叫函式程式碼如下:remove(lst.begin(),lst.end(),4);remove通過迭代器的指標向前移動來刪除,將沒有被刪除的元素放在連結串列的前面,並返回一個指向新的超尾值的迭代器。由於remove()函式不是成員,因此不能調整連結串列的長度。remove()函式並不是真正的刪除,要想真正刪除元素則可以使用erase()或者resize()函式。。
2、erase()函式
erase()函式可以刪除給定區間的元素。它接受兩個迭代器引數,這些引數規定了要刪除的區間。例如:要刪除第一個元素和第二個元素,程式碼如下:score.erase(scores.begin(),score.begin()+2); 其中該區間不包括最後一個元素,即“左閉右開”。
3、resize()函式
對於resize()函式,resize()函式用來調整容器的大小。對於容器c,c.resize(n) 調整容器 c 的長度大小,使其能容納 n 個元素,如果 n < c.size(),則刪除多出來的元素;否則,新增採用值初始化的新元素。
4、下面用一段程式碼來說remove()函式、erase()函式和resize()函式的區別
結果圖如下:#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int n; char ask; cout<<"Please input the number of the vector: "; cin>>n; cout<<endl; vector<char> V; V.reserve(n); ///reserve()指定容器能儲存資料的個數 cout<<"Please input "<<n<< " elements of the vector: "; for(int i=0;i<n;i++) { char t; cin>>t; V.push_back(t); } vector<char> V2,V3; V2.assign(V.begin(),V.end()); ///賦值 V2.assign(V.begin(),V.end()); cout<<endl; cout<<"Please input the element of the vector you want to delete: "; cin>>ask; cout<<endl; cout<<"Please input the number of resize: "; int ir; cin>>ir; vector<char>::iterator last; last=remove(V.begin(),V.end(),ask); V2.erase(remove(V2.begin(),V2.end(),ask),V2.end()); V3.resize(ir,'M'); cout<<endl; cout<<"The result of remove: "<<endl; for(vector <char>::iterator iter=V.begin();iter!=V.end();iter++) cout<<*iter<<" "; cout<<endl; cout<<"The result of erase: "<<endl; for(vector <char>::iterator iter=V2.begin();iter!=V2.end();iter++) cout<<*iter<<" "; cout<<endl; cout<<"The result of resize: "<<endl; for(vector <char>::iterator iter=V3.begin();iter!=V3.end();iter++) cout<<*iter<<" "; cout<<endl; return 0; }
另外一些容器的成員函式clear(),erase()等也能實現刪除元素的操作。
參考資料: