C++STL remove_if函数为什么先用一个find_if

先贴代码:


template <class _ForwardIterator, class _Predicate>
_LIBCPP_NODISCARD_EXT _LIBCPP_CONSTEXPR_AFTER_CXX17 _ForwardIterator
remove_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred)
{
    __first = _VSTD::find_if<_ForwardIterator, typename add_lvalue_reference<_Predicate>::type>
                           (__first, __last, __pred);
    if (__first != __last)
    {
        _ForwardIterator __i = __first;
        while (++__i != __last)
        {
            if (!__pred(*__i))
            {
            	//如果不符合条件就把后面的数据往前移,覆盖符合条件的元素
                *__first = _VSTD::move(*__i);
                ++__first;
            }
        }
    }
    return __first;
}

remove_if()是algorithm文件下的函数,功能是根据用户传入的函数删除容器中的元素。我看源码的时候就有点纳闷,直接用下面的while不就行了么,干嘛还要先用find_if(抠脑阔)?

于是我自己尝试去写一个函数实现这个功能,因为处理方法是“后面的数据覆盖要删除的数据”,刚开始写的时候考虑到一个问题:那么如果第一个元素就是要删除的怎么办呢?先判断一下第一个然后再处理?貌似调用一下find_if,从第二个元素开始处理更好啊,哈哈哈哈哈,愚蠢的我貌似领悟了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值