是否有类似 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;
}