3

对于空容器, std::all_of( ) 和 std:none_of( ) 都返回 true。

除了辩论这个概念方面,有人可以提出一个不要求始终检查容器是否为空并检查 all_of 或 none_of 的习语吗?

这很麻烦,因为在空容器上的两种算法中使用相同的谓词将表明该谓词对于元素的 ALL 和 NONE 都是正确的。因此,您的(空)向量是 all_of “odd”、all_of “even”、none_of “odd”和 none_of “even”。

在更实际的层面上,我正在考虑检查项目集合的状态,例如任何“准备处理”,并期望一个空集合对应于“否,没有准备好处理的元素”。我知道我可以单独检查它是否为空,但我正在寻找其他可能性。

4

2 回答 2

16

在更实际的层面上,我正在考虑检查项目集合的状态,例如任何“准备处理”,并期望一个空集合对应于“否,没有准备好处理的元素”。

这就是为什么返回一个空集合。std::any_of()false

如果问题是“是否所有项目都已完成处理?”,那么预期答案将是“是的,一切都已完成”。如果首先没有要处理的项目(就是这种std::all_of()情况)。

类似地,问题“处理过程中没有发生错误吗?” 将回答“是的,没有错误”。对于一个空列表(没有工作->没有错误)。这就是std::none_of()检查的内容。

于 2013-03-21T18:44:50.567 回答
2

如果容器为空,您可以编写自己的包装器并使用它来修改结果:

// in your namespace, not std:
template< class InputIt, class UnaryPredicate >
bool none_of( InputIt first, InputIt last, UnaryPredicate p )
{
  return first != last && std::none_of( first, last, p );
}
于 2013-03-21T18:34:40.030 回答