天天看點

STL庫容器vector clear函數

STL庫容器vector clear函數

clear()函數删除目前vector中的所有元素。

vector<int> v(,);
int a[]={,,,,,,,,,};
v.assign(a,a+);
for(int i=;i<=;i++)
    cout<<v.at(i)<<" ";
cout<<endl;
v.clear();
cout<<"可容納的元素數量"<<v.capacity()<<endl;
for(int i=;i<=;i++)
    cout<<v.at(i)<<" ";
cout<<endl;
           

則輸出:

1 2 3 4 5 6 7 8 9 10 
可容納的元素數量10
           

然後會報錯,因為此時目前vector已沒有元素,at函數會報越界,即使可以容納這麼多元素

下面我們再來看另一個程式

vector<int> v(,);
int a[]={,,,,,,,,,};
v.assign(a,a+);
for(int i=;i<=;i++)
    cout<<v.at(i)<<" ";
cout<<endl;
v.clear();           《--------重新指派
v.assign(a,a+);
for(int i=;i<=;i++)
    cout<<v.at(i)<<" ";
cout<<endl;
           

這個程式則會輸出:

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
           

它不會報錯,隻因為重新指派了

這說明了clear函數隻會清除元素,但不會清除這些元素所占的空間

vector<int> v(,);
int a[]={,,,,,,,,,};
v.assign(a,a+);
vector<int>::iterator iter;
for(int i=;i<=;i++)
    cout<<v.at(i)<<" ";
cout<<endl;
v.clear();
for(iter=v.begin();iter!=v.end();iter++)
    cout<<*iter<<" ";
cout<<endl;
           

這個程式會輸出:

1 2 3 4 5 6 7 8 9 10
           

且不會報錯,隻因為我們使用了疊代器