vector之erase

来源:互联网 发布:mysql表锁了怎么办 编辑:程序博客网 时间:2024/05/17 23:44

v1 = [10 20 30 40 50]

  1. v1.erase( v1.begin( ) );
v1 = 20 30 40 50

2. v1.erase( v1.begin( ) + 1, v1.begin( ) + 3 );

v1 = 20 50(只删掉了30,40)

那现在如果该容器中有两个元素10要怎么删除呢?

  1. for(Iter = v1.begin(); Iter != v1.end(); Iter++) 
  2.   if(*Iter == 10) 
  3.   { 
  4.       v1.erase(Iter);
  5.      Iter = v1.begin(); //当erase后,旧的容器会被重新整理成一个新的容器
  6.   } 
  7. }

重新Iter迭代器指定下一个元素.

上面那种方法是给Iter重新赋于新v1的begin迭代器。

还有一种方法是直接赋删除元素的下一个迭代器给Iter

实现方法的代码如下:

  1. for(Iter = v1.begin(); Iter != v1.end(); Iter++) 
  2.   if(*Iter == 10) 
  3.   { 
  4.    Iter = v1.erase(Iter);//Iter为删除元素的下一个元素的迭代器
  5.   //即第一次这段语句后Iter 会是20,大家可以通过debug调试出来查看下数值
  6.   } 
  7.  
  8.   if(Iter == v1.end()) //要控制迭代器不能超过整个容器
  9.   { 
  10.    break;
  11.   } 
  12. }


0 0