remove函数
remove函数用于移除[first,last)之中所有与value相等都元素。这一算法并不真正从容器中删除元素,而是将每一个不与value相等的元素轮番赋值给first之后的空间。返回值forearditerator标示出重新整理后的最后元素的下一个位置。例如序列{0,1,0,2,0,3,0,4},如果我们执行remove(),希望移除所有0值元素,执行结果将是{1,2,3,4,0,3,0,4}。每一个与0不想等的元素,1,2,3,4,分别被拷贝到靠前的位置,然后返回的forwarditerator指向第五个位置。如果要删除数据,可以将返回的迭代器交给区间所在容器的erase()member function。但注意,array不适用remove()和remove_if(),因为array无法缩小尺寸,导致残留数据永远存在。对array而言,较为合适的算法是remove_copy()和remove_copy_if()。
remove_copy_if
移除[first,last)区间内所有与value相等的元素。它不真正从容器中删除那些元素,而是将结果复制到一个以result标示起始位置的容器上。返回值OutputIterator指出被复制的最后元素的下一个位置。源码如下:
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator remove_copy_if(InputIterator first, InputIterator last,
OutputIterator result, Predicate pred)
{
for(;first!=last;++first)
{
if(*first != value)
{ *result = *first; ++result; }
}
return result;
}