remove():
这个remove是STL库里面的函数,原型如下: Eliminates a specified value from a given range without disturbing the order of the remaining elements and returning the end of a new range free of the specified value. template<class ForwardIterator, class Type> ForwardIterator remove( ForwardIterator _First, ForwardIterator _Last, const Type& _Val ); 参数说明如下: _First A forward iterator addressing the position of the first element in the range from which elements are being removed. _Last A forward iterator addressing the position one past the final element in the range from which elements are being removed. _Val The value that is to be removed from the range.
返回值:迭代器ForwardIterator,指向操作后第一个被排除的值
eg.array={1,6,6,3};
itor = remove(array.begin(),array.end(),6);//排除值为6的元素,执行操作后的结果:1,3,6,3,看来remove()的思路是把不符 合条件的元素值(非6)向前提
cout<<*itor<<endl;//结果:6
功能:移除[first, last)范围内等于val的元素。但这个函数只是把val移到vec的末尾,并不真正删除remove函数是不会真正删除任何东西的,remove只会把你想留下的元素放到集合的最前面,但是remove过以后集合的大小是不会变的。所以你真的要删东西还是要用集合的erase函数。
erase():
原型:
(1)string& erase ( size_t pos = 0, size_t n = npos ); (2)iterator erase ( iterator position ); (3)iterator erase ( iterator first, iterator last ); 也就是说有三种用法: (1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符 (2)erase(position);删除position处以后的所有字符(position是个string类型的迭代器) (3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)返回值:
未被删除的第一个元素的iterator
【转自wangwenwen】注:
1、条款44指出,对于list,调用remove成员函数比应用erase-remove惯用法更高效。2、有两种“类似remove”的算法:remove_if和unique。
remove和remove_if之间的相似性很直截了当。所以我不会细讲,但unique行为也像remove。它用来从一个区间删除东西(邻近的重复值)而不用访问持有区间元素的容器。结果,如果你真的要从容器中删除元素,你也必须成对调用unique和erase,unique在list中也类似于remove。正像list::remove真的删除东西(而且比erase-remove惯用法高效得多)。list::unique也真的删除邻近的重复值(也比erase-unique高效)。