And*_*rov 43
谓词是返回布尔值或具有bool operator()
成员的对象的C++函数.一元谓词采用一个参数,二元采用两个,依此类推.问题谓词的例子可以回答特定的算法:
几乎所有STL算法都将谓词作为最后一个参数.
您可以使用标准,自定义和/或谓词制作类来构造新谓词(这是一个很好的参考).
Ste*_*sop 12
C++标准定义Predicate
如下(25/7):
只要算法需要一个函数对象,当应用于取消引用相应迭代器的结果时,就会使用Predicate参数返回一个testable值为true.换句话说,如果算法将Predicate pred作为其参数并首先作为其迭代器参数,它应该在构造中正确工作
if (pred(*first)){...}
.函数对象pred
不应通过解除引用的迭代器应用任何非常量函数.该函数对象可以是指向函数的指针,或者是具有适当函数调用操作符的类型的对象.
有BinaryPredicate
两个参数的类似定义.
所以在英语中,它是一个函数或具有operator()
重载的对象,它:
if
语句中测试真值的值(因此也是因为C++的语言规则,也是在while
循环中等等).此外,由于许多算法没有指定它们执行的操作的确切顺序,因此如果谓词不一致,您可能会发现您会得到不可预测的行为,即结果是否取决于可在调用之间更改的输入值以外的任何值.
以及算法,逻辑否定符not1
中<functional>
需要一个Predicate
模板参数.在这种情况下,还有一个额外的要求(20.3/5):
要使适配器和其他组件能够操作带有一个或两个参数的函数对象,需要函数对象相应地为带有一个参数的函数对象提供typedefs argument_type和result_type,并为带有两个参数的函数对象提供first_argument_type,second_argument_type和result_type .
它不是特定于C++(甚至计算机语言).在自然语言语法中,在诸如门打开的语句中,开放部分是谓词并且是真或假,所以说你有一个类cGate
,具有成员函数bool cGate::isOpen()
,这样的函数将是谓词.
本质上,如果函数询问有关对象状态或值的问题,并且结果为true或false,则它是谓词.
谓词只是一个函数,它返回true或false,具体取决于它的输入是否满足某些条件.一般来说,谓词函数应该是纯粹的 ; 当给定相同的输入时,它应该总是返回相同的结果(因此bool isDateInPast(Date &date)
将是一个错误的谓词).
例如,它们通常用作STL排序例程的回调(即" 输入a
少于输入b
? ").
归档时间: |
|
查看次数: |
47534 次 |
最近记录: |