vector 删除和添加元素的初学心得

STL中的vector,动态增长数组,支持随机访问,当开辟的连续空间不够存放(capacity=size时又插入或加入新元素),开辟新的空间(capacity是原来的两倍),将原来的拷贝至新的空间并把新添加的元素加进来。

访问、修改、删除、添加是基本操作。访问和修改某个元素可以通过"[ ]"和迭代器iterator实现。对于删除和添加,目前本人只会通过iterator的erase函数实现删除中间某个元素,用iterator的inser函数或是 push_back实现。iterator的操作就像指针一样。

最近用vector的时候出现过报错 vector iterator not dereferencable。这种错通常是iterator指向超出了vector的范围的无效的地方。单步调试发现是push_back后,超出空间,重新分配了内存,原来的iterator无效了。因此需要给iterator重新指向新的的内存空间。

int main()
{
	std::vector<int> mytracks;
	int a=0,b=1,c=2,d=3;
	std::vector<int>::iterator p;
	int e;
	int i;
	mytracks.push_back(a);
	mytracks.push_back(b);
	mytracks.push_back(c);
	mytracks.push_back(d);
	for(p=mytracks.begin(),i=0;p!=mytracks.end();)
	{
		if((*p)==3)
		{			
			e=4;
			mytracks.push_back(e);
			e=5;
			mytracks.push_back(e);
			p=mytracks.begin()+i;//重新指向新的内存空间
		}

		if((*p)==4) 
		{
				p=mytracks.erase(p);
				std::cout<<"erase 4"<<std::endl;
		}
		else
		{ 			
			std::cout<<(*p)<<std::endl;
			p++;
			i++;
		}
	}
	system("pause");
	return 0;
}

结果应该是

0
1
2
3
erase 4
5



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值