STL算法all_of的C++代码实现与解释
模板定义
template<class InputIterator, class UnaryPredicate>
bool all_of (InputIterator first, InputIterator last, UnaryPredicate pred)
{
while (first!=last)
{
if (!pred(*first)) return false; //pred返回false,算法返回false
++first;
}
return true;
}
含义解释
class InputIterator: 表示输入的迭代器的类型。
class UnaryPredicate: 表示返回值为bool类型的一元(即只有一个形参)的函数或者仿函数(或者称之为谓词)。
first: 起始迭代器。
last: 终止迭代器。
算法解释: 对在[first, last)的迭代器之间的所有元素执行一元谓词pred(通俗地讲,就是把first和end之间的所有元素都作为实参,放到谓词pred对应的函数或仿函数中执行一次),若所有谓词执行后均返回真,则all_of返回真,否则返回假。
算法效果: 判断[first, last)中的元素是否全部满足谓词pred的条件。
案例
void main()
{
std::array<int,8> foo = {3,5,7,11,13,17,19,23};
if ( std::all_of(foo.begin(), foo.end(), [](int i){return i%2;}) )
std::cout << "All the elements are odd numbers.\n";
}
案例解释: 判断数组foo中的元素是否全是奇数。