首页 > 解决方案 > 是否有类似 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。所以我需要知道是否有任何元素被修改

标签: c++algorithmc++11stl

解决方案


如果任何元素为此谓词返回 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;
}

推荐阅读