是否有任何接近Haskell的全部或任何功能作为STL的一部分?如果没有,下面是一个很好的实现(我注意到如果迭代器是随机访问,sgi STL执行部分特化,虽然我没有打扰这个)?
template <typename InputIterator, typename Predicate>
inline bool all(InputIterator first, InputIterator last, Predicate pred) {
while (first != last) {
if (!pred(*first)) {
return false;
}
++first;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
类似地,如何最好地转换为迭代两个序列,并在BinaryPredicate为所有人返回true时返回true,否则返回false?我知道这是相对微不足道的,但似乎这应该由算法提供,我想确保我不会忽略某些东西.
有没有all或any算法,C++当前,但是C++ 0x中增加std::all_of和std::any_of算法的C++标准库.您的实施可能已经支持这些.
由于这两种算法都需要测试范围内的每个元素(至少直到它们找到匹配或不匹配),因此没有任何理由将它们专门用于不同类型的迭代器:与前向迭代器一起使用时的性能应该是与随机访问迭代器一起使用时的性能相同.
你的执行情况all很好; Visual C++ all_of实现实际上是相同的,除了它使用for循环而不是while循环.
如何最好地转换为迭代两个序列,并在BinaryPredicate为所有人返回true时返回true,否则返回false?
这是做什么的std::equal.您需要先检查范围的大小,以确保它们的大小相同.