STL(十)——remove算法

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;
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值