关于 数组容器 中 erase()函数用例和原理

<img src="http://img.blog.csdn.net/20150411201447040?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHNncWpo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />#include<iostream>
#include<vector>
using namespace std;
	vector<int>ls;
void gq()
{
	for(int i=0;i<10;i++)
		ls.push_back(i);
}


int main()
{
	cout<<ls.capacity()<<endl;//定义后容器占用内存大小
	gq();
	
	cout<<"ls.capacity()="<<ls.capacity()<<"ls.size()="<<ls.size()<<endl;
	

	ls.clear();
	for(int a=11;a<13;a++)
		ls.push_back(a);
	cout<<"ls.capacity()="<<ls.capacity()<<"ls.size()="<<ls.size()<<endl;//发现只是把容器size
	//置为0,并没有释放内存。
	
	for(int j=0;j<10;j++)//因为内存没释放 发现元素值没有变 并且clear()后,迭代器指向第一个元素
		cout<<ls[j]<<endl;//才有了 11 12 2 3——盖住了前两个元素。此时 ls。end()返回
	//指向12的迭代器。
     cout<<endl<<endl;
	
	ls.push_back(200);
		ls.push_back(100);
	
	vector<int>::iterator it=ls.begin()+3;
	for(;it!=ls.end();)//当地一个元素删除, 后面的元素整体前移,迭代器顺理成章指向第二个元素。
	{
	ls.erase(it);
	
	}
	//it自增1;
	
for(vector<int>::iterator iter=ls.begin();iter!=ls.end();iter++)
		cout<<"lingwai ="<<*iter<<endl;
	
cout<<"ls.capacity()="<<ls.capacity()<<"ls.size()="<<ls.size()<<endl;

	gq();

	vector<int>().swap(ls);//swap ,清除容器 ,并收回空间
	
	//for(int m=0;m<10;m++)//如果不注释,那么runtime error!
	//	cout<<ls[m]<<endl;
	cout<<"ls.capacity()="<<ls.capacity()<<"ls.size()="<<ls.size()<<endl;
	
	return 0;
}
技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。