vector中的erase用法注意

vector<int> v1

vector 中的erase是这样描述的:v1.erase(pos) // 删除pos位置的数据,传回下一个数据的位置。

但是我们在删除相同元素时会发生错误:

int main()
{
 int a[] = {3,2,3,4,2,2,2,2,5};
 vector<int> iVec(a, a+sizeof(a)/sizeof(a[0]));

 vector<int>::iterator it = iVec.begin();
 for ( ; it != iVec.end();++it)
 {
  if (*it == 2)
  {
       iVec.erase(it);
  }

 }

}

这样元素2被删除后,it成了野指针了,++it就找不到地方,所以会出现崩掉,那么我像网上众多的转帖说的那样修改行不行呢?

 vector<int>::iterator it = iVec.begin();
 for ( ; it != iVec.end();)
 {
  if (*it == 2)
  {
   it = iVec.erase(it);
  }
  else
  {
   ++it;
  }

 }

这样也是可以的,或者我们也可以这样修改:

 vector<int>::iterator it = iVec.begin();
 for ( ; it != iVec.end();++it)
 {
  if (*it == 2)
  {
   it = iVec.erase(it);
   --it;
  }
 }

 

最后,不足之处请大家指正,共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值