Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::all_of()和std:none_of()的空容器的好习惯用法?_C++_C++11_Stl Algorithm - Fatal编程技术网

C++ 使用std::all_of()和std:none_of()的空容器的好习惯用法?

C++ 使用std::all_of()和std:none_of()的空容器的好习惯用法?,c++,c++11,stl-algorithm,C++,C++11,Stl Algorithm,对于空容器,std::all_of()和std:none_of()都返回true 除了在概念上的争论之外,有人能提出一个习惯用法,它不要求总是检查容器是空的,并且检查所有的还是没有 这很麻烦,因为在空容器上的两个算法中使用相同的谓词将表明谓词对所有元素都是真的,而对所有元素都不是真的。所以,你的(空)向量都是奇数,都是偶数,都不是奇数,都不是偶数 在更实际的层面上,我考虑的是检查项目集合的状态,如任何“准备处理”,并期望空集合对应“否,没有准备处理的元素”。我知道我可以单独检查它是否为空,但我正

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

除了在概念上的争论之外,有人能提出一个习惯用法,它不要求总是检查容器是空的,并且检查所有的还是没有

这很麻烦,因为在空容器上的两个算法中使用相同的谓词将表明谓词对所有元素都是真的,而对所有元素都不是真的。所以,你的(空)向量都是奇数,都是偶数,都不是奇数,都不是偶数


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

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

// 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 );
}
//在您的命名空间中,而不是std中:
模板<类输入,类一元谓词>
bool none_of(InputIt first,InputIt last,一元谓词p)
{
return first!=last&&std::none_of(first,last,p);
}
在更实际的层面上,我考虑的是检查项目集合的状态,如任何“准备处理”,并期望空集合对应“否,没有准备处理的元素”

这就是为什么对于空集合,
std::any_of()
会返回
false

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


同样,对于空列表(无工作->无错误),问题“处理过程中是否未发生错误?”将回答“是,没有错误”。这是
std::none_of()
检查的内容。

有什么问题?即使您将有
if(所有的(范围,准备处理))用于(自动&e:range)进程(e)那很好。如果对于空容器上的“ready for processing”(准备处理)谓词,没有任何一个生成true,那么对我来说,这似乎是正确的答案。
所有的
都是“s中的所有x,P(x)”<代码>其中没有一个是“对于S中的所有x,!P(x)”
任何一个
都是“S中存在x,P(x)”
所有的
和所有的
都不是彼此的否定--
“对于S中的所有x,P(x)”是“存在x,!P(x)”(又名
任何(…,!P)
)和
!没有一个(…)
是(…)
的任何(…)@yakhuh?我问的是一个空位的情况。对于诸如“isEven”之类的谓词。。。对于空集,all_of(“isEven”)返回TRUE。此外,虽然我知道所有的和没有的都不是相反的,但问题是它们对于空集都是正确的。(Johannes和ipc,感谢您的输入)。@Arbalest“对于{}中的所有x,isEven(x)”是正确的。这被称为真空满足--“对于{}中的所有x,P(x)”对于每个谓词P都为真。因此
all_of
返回真。这在C++11规范中并不是一个奇怪的现象:它是逻辑上的一个奇怪现象。“这个空集的所有元素都是正方形”是真的,这是唯一精确的布尔响应。“这个空集合中是否有一个元素是正方形”将是错误的。“这个空集的所有元素都是非正方形的”应该是真的。你的困惑是常见的,但你的结论是错误的。谢谢。这正是我所要求的。