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
且不會報錯,隻因為我們使用了疊代器