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删除元素后,就会将当前节点删掉;