STL vector中remove()与erase()使用

本文主要解释一下remove()erase()函数在删除容器中元素时的使用:

(在使用remove()函数进行删除vector里面的函数时,不仅要包含头文件<vector>,还要包含头文件<algorithm>,

      不然编译会出错:error C2660: “remove”: 函数不接受 3 个参数,

      此时是因为就变成调用remove()文件的函数了,而它只有一个参数,在stdio.h中   int remove( const char * filename );


  1. iterator的使用陷阱:
  2. vector<int> temp;
  3. temp.push_back(1);
  4. temp.push_back(6);
  5. temp.push_back(6);
  6. temp.push_back(3);

  7. for(vector<int>::iterator iter=temp.begin(); iter!=temp.end(); iter++)  
  8. {  
  9.       if( *iter == 6)  
  10.              iter=veci.erase(iter);//指向被删除元素的下一个元素;自加后指向 再后一个元素; 
  11. }  

这样使用是错误的,因为erase结束后,iter失效了,erase()返回值是一个迭代器,iter++就产生了错误,并不指向下一个6,指向了3,所以只能删除一个6。


可以修改为以下,可以删除所有的6:


  1. for(vector<int>::iterator iter=temp.begin(); iter!=temp.end(); )  
  2. {  
  3.      if( *iter == 3)  
  4.           iter = veci.erase(iter);  
  5.       else  
  6.             iter ++ ;  
  7. }  

也可以结合remove()进行删除:

  1. temp.erase(remove(temp.begin(),temp.end(),6),temp.end()); 


remove()是STL的通用算法std::remove(first,last,val)移除[first,last)范围内等于val的元素,但是这个函数只是把val移到temp的末尾,并不真正删除,如要删除,需要结合erase(),如上。(注:first,last是迭代器)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值