1. 程式人生 > >C++刪除元素的函式總結

C++刪除元素的函式總結

在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()等也能實現刪除元素的操作。

參考資料: