你能举个例子或提供一个相关主题的链接吗?
你能举个例子或提供一个相关主题的链接吗?
谓词是一个返回布尔值或具有 bool operator()
成员函数的 C++ 函数。一元谓词接受一个参数,二元谓词接受两个参数,以此类推。谓词可以回答特定算法的以下问题:
几乎所有的 STL 算法 都将谓词作为最后一个参数。
您可以使用标准、自定义和/或谓词生成类(这里有一个很好的参考资料)构建新的谓词。
bool
类型或具有operator bool()
,可以返回任何可测试为真或假的内容。因此,可以将转换为bool
的内置类型,例如指针,也视为合格。 - Steve Jessop这与C++(甚至计算机语言)无关,它是自然语言语法中的一个概念。比如,在类似“大门打开了”的陈述中,“打开了”部分是谓语,其结果要么为真,要么为假。因此,如果你有一个名为cGate
的类,并拥有一个成员函数bool cGate::isOpen()
,这样的函数将会是一个谓词。
基本上,如果该函数询问对象状态或值并且结果只能为真或假,那么它就是一个谓词。
if(pred(*first)){...}
结构中应正确工作。pred
函数对象不应通过解引用的迭代器应用任何非常量函数。该函数对象可以是指向函数的指针,或者是具有适当函数调用运算符的类型的对象。<functional>
中的逻辑否定器 not1
还需要一个 Predicate
模板参数。在这种情况下,还有一个额外的要求 (20.3/5):copy_if
。是的,它们是一元的。排序函数不被视为谓词。 - Ben VoigtCompare
参数的要求比BinaryPredicate
参数的要求严格得多。比较器必须返回true
或false
(而不是任何可测试真值),当然还必须实现一个严格弱序。但由于C++0x使用了术语“Predicate”而不是“UnaryPredicate”,我们不得不得出结论,虽然“binary predicate”在英语中是“predicate”,但BinaryPredicate
在标准语中并不是Predicate
。疯狂的事情 :-) - Steve Jessop