STL remove和remove_if

1)对于vector容器:

remove和remove_if的区别就是第3个参数的区别,remove第3个参数为常数,remove_if第3个参数为过滤条件,调用时传一个函数指针,remove和remove_if 后,容器的size不会改变,只是想元素往前移动,在remove和remove_if后,需要用erase删除元素;例子如下:

#include <vector>
#include <algorithm>

using namespace std;

 


bool isOdd(int value) 

 return (value % 2) == 1; 

int _tmain(int argc, _TCHAR* argv[])
{

 std::vector<int>  my_container; 

 for (int i = 0; i < 10; ++i)
 { 
  my_container.push_back(i); 
 } 
 

 

 remove_if(my_container.begin(), my_container.end(), isOdd);

 for (vector<int>::iterator iter=my_container.begin();iter!=my_container.end();iter++)
 {
  //
  printf("remove_if=%d\n",*iter);

 }

 my_container.erase( remove_if(my_container.begin(), my_container.end(), isOdd), my_container.end());

 //
 for (vector<int>::iterator iter=my_container.begin();iter!=my_container.end();iter++)
 {
  //
  printf("erase=%d\n",*iter);

 }

 

 return 0;
}

 

打印结果如下:

 

2)对于List容器

List容器本身提供remove函数和remove_if函数,remove只有一个参数,传值,remove_if也只有一个参数,为过滤条件,传函数指针;注意:list容器的remove和remove_if操作后,容器的size是会发生变化的,同样如果使用泛型算法里面的remove和remove_if,容器的size也会发生变化;这个是和vector不同的:举例如下:

int _tmain(int argc, _TCHAR* argv[])
{

 //std::vector<int>  my_container; 
 std::list<int>my_container;

 for (int i = 0; i < 10; ++i)
 { 
  my_container.push_back(i); 
 } 
 

 //remove(my_container.begin(), my_container.end(), 3);
 my_container.remove_if(isOdd);

 for (list<int>::iterator iter=my_container.begin();iter!=my_container.end();iter++)
 {
  //
  printf("remove_if=%d\n",*iter);

 }

 


 return 0;
}

 

输出结果:

这个和vector的list的有关,vector为数组,删除元素,所有的元素前移,list删除元素后,就会将当前节点删掉;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值