微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有类似 std::any_of 的东西将谓词应用于所有元素

如何解决是否有类似 std::any_of 的东西将谓词应用于所有元素

std::any_of 函数模板的行为等价于:

 template<class InputIterator,class UnaryPredicate>   bool any_of
 (InputIterator first,InputIterator last,UnaryPredicate pred) {  
 while (first!=last) {
     if (pred(*first)) return true;
     ++first;   }   return false; }

所以它不会将谓词应用于所有元素。如果该谓词的任何元素返回 true,是否还有其他函数返回 true,但同时 t 将对给定范围内的所有元素运行该谓词?

UPD:所以为什么我需要那个 - 我的函数根据某些规则修改容器的元素,并返回 true 的元素被修改,否则为 false。所以我需要知道是否有任何元素被修改

解决方法

是否有其他函数在该谓词的任何元素返回 true 时返回 true,但同时 t 将对给定范围内的所有元素运行该谓词?

我的函数修改容器的元素

std 中没有函数可以做到这一点。只有 std::for_each(_n) 允许通过其可调用参数修改元素。

您可以为此编写一个包装器

template <typename MutableForwardIter,typename MutatingPredicate>
bool my_any_of(MutableForwardIter first,MutableForwardIter last,MutatingPredicate pred) {
    bool any = false;
    std::for_each(first,last,[&any,pred](auto & val){ any |= pred(val); });
    return any;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。