<algorithm>内に定義されています。
template< class InputIterator, class UnaryPredicate > bool all_of( InputIterator first, InputIterator last, UnaryPredicate p );
template< class InputIterator, class UnaryPredicate > bool any_of( InputIterator first, InputIterator last, UnaryPredicate p );
template< class InputIterator, class UnaryPredicate > bool none_of( InputIterator first, InputIterator last, UnaryPredicate p );
[first, last)
内の全ての要素に対し、単項条件式p
がtrueを返すか判定します。[first, last)
内のいずれか要素に対し、単項条件式p
がtrueを返すか判定します。[first, last)
内の全ての要素に対し、単項条件式p
がfalseを返すか判定します。
first
, last
- 探索される要素の範囲
p
- 単項の条件式
last - first
回、条件式を適用するのとほぼ同等
all_of
template< class InputIterator, class UnaryPredicate > bool all_of(InputIterator first, InputIterator last, UnaryPredicate p) { for (; first != last; ++first) { if (!p(*first)) return false; } return true; }
any_of
template< class InputIterator, class UnaryPredicate > bool any_of(InputIterator first, InputIterator last, UnaryPredicate p) { for (; first != last; ++first) { if (p(*first)) return true; } return false; }
none_of
template< class InputIterator, class UnaryPredicate > bool none_of(InputIterator first, InputIterator last, UnaryPredicate p) { for (; first != last; ++first) { if (p(*first)) return false; } return true; }
#include <vector> #include <numeric> #include <algorithm> #include <iterator> #include <iostream> #include <functional> int main() { std::vector<int> v(10, 2); std::partial_sum(v.begin(), v.end(), v.begin()); std::cout << "Among the numbers: "; std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); if (std::all_of(v.begin(), v.end(), [](int i){ return i % 2==0; })) { std::cout << "\nAll numbers are even\n"; } if (std::none_of(v.begin(), v.end(), std::bind(std::modulus<int>(), _1, 2))) { std::cout << "None of them are odd\n"; } struct DivisibleBy { int d; DivisibleBy(int n) : d(n) {} bool operator()(int n) const { return n % d == 0; } }; if( std::any_of(v.begin(), v.end(), DivisibleBy(7))) { std::cout << "At least one number is divisible by 7\n"; } }
出力:
Among the numbers: 2 4 6 8 10 12 14 16 18 20 All numbers are even None of them are odd At least one number is divisible by 7