13.5.2  逻辑仿函数

13.5.2 逻辑仿函数

逻辑仿函数支持逻辑与、逻辑或和逻辑非运算。逻辑运算和算术运算非常相似,均执行“或”和“与”等操作。逻辑操作本身并不重要,其主要用途在于和仿函数适配器相结合,以便在使用仿函数时可以执行逻辑操作。

1.逻辑与

978-7-111-51399-5-Chapter13-47.jpg

仿函数类logical_and<T>是一种自适应二元谓词,可用于验证某条件的真伪。若f是仿函数类logical_and<T>的对象,并且x与y均是型别T的数值,而T可转换为bool,仅当x和y皆为true时,f(x,y)才会返回true。

仿函数逻辑“与”在使用时需要包含头文件<functional>。型别T还可以是bool类型。该仿函数的基类是binary_function<T,T,bool>。

该仿函数类包含5个成员函数:

1)logical_and::first_argument_type。该成员函数代表第一个参数的型别T。

2)logical_and::second_argument_type。该成员函数代表第二个参数的型别T。

3)logical_and::result_type。该成员代表执行结果的型别bool。

4)boollogical_and::operator()(const T& x,const T& y)const。该成员函数代表函数调用的操作符,其返回值为x&&y。

5)logical_and::logical_and()。该成员函数代表该仿函数类默认的构造函数。

例13-13

978-7-111-51399-5-Chapter13-48.jpg

978-7-111-51399-5-Chapter13-49.jpg

978-7-111-51399-5-Chapter13-50.jpg

例13-13的执行结果为:

978-7-111-51399-5-Chapter13-51.jpg

2.逻辑或

978-7-111-51399-5-Chapter13-52.jpg

仿函数逻辑“或”是一种自适应二元谓词,可用于验证某条件的真伪。若f是类logical_or<T>的对象,并且x和y均是型别T的数值,型别T还可以是bool类型,仅当x或y两者之中至少有一个为true时,f(x,y)才会返回true。使用仿函数“逻辑或”时,同样需要包含头文件<functional>。该仿函数的基类是binary_function<T,T,bool>。该仿函数类包含5个成员函数:

1)logical_or::first_argument_type。该成员函数代表第一参数的型别T。

2)logical_or::second_argument_type。该成员函数代表第二参数的型别T。

3)logical_or::result_type。该成员代表执行结果的型别bool。

4)boollogical_or::operator()(const T&x,const T&y)const。该成员函数代表函数调用的操作符。其返回值为x||y。

5)logical_or::logical_or()。该成员函数代表该仿函数类的默认构造函数。

例13-14

978-7-111-51399-5-Chapter13-53.jpg

978-7-111-51399-5-Chapter13-54.jpg

例13-14的执行结果为:

978-7-111-51399-5-Chapter13-55.jpg

3.逻辑非

仿函数逻辑非:

978-7-111-51399-5-Chapter13-56.jpg

仿函数类logical_not<T>是一种自适应谓词,可用于验证某条件的真伪。仿函数“逻辑非”仅仅需要一个参数。若f是仿函数“逻辑非”(logical_not<T>)的对象,并且x是型别T的数值,型别T还可以是bool类型,仅当x为false时,f(x)才会返回true。

仿函数“逻辑非”的基类是:unary_function<T,bool>

仿函数类“逻辑非”包含4个成员函数:

1)logic_not::argument_type。该成员函数代表参数的型别T。

2)logic_not::result_type。该成员函数代表结果的型别bool。

3)bool logic_not::operator()(const T&x)const。该成员函数代表函数调用的操作符,其返回值为!x。

4)logical_not::logical_not()。该成员函数代表该仿函数类的默认构造函数。

例13-15

978-7-111-51399-5-Chapter13-57.jpg

978-7-111-51399-5-Chapter13-58.jpg

例13-15的执行结果为:

978-7-111-51399-5-Chapter13-59.jpg