可调用对象
- 函数
- 函数指针
- 重载了函数调用的类。即重载了operator()。
- lambda表达式
谓词
谓词是一个可调用表达式,返回值能用作条件值。
标准库不少算法(如sort)可以接受一个谓词作为参数,有一元谓词和二元谓词。
标准库提供的常用可调用对象
名称 | 含义 |
---|---|
less | 小于 |
less_equal | 小于等于 |
greater | 大于 |
greater_equal | 大于等于 |
equal_to | 等于 |
not_equal_to | 不等于 |
negate | 负 |
plus | 加 |
minus | 减 |
multiplies | 乘 |
divides | 除 |
modules | 余 |
logical_and | 逻辑与 |
logical_or | 逻辑或 |
logical_not | 逻辑非 |
bit_and | 位于 |
bit_or | 位或 |
bit_xor | 位异或 |
使用举例
可调用对象的使用往往要结合bind函数。
int main()
{
//sort
vector<int> arr({3, 2, 4, 1});
sort(arr.begin(), arr.end(), less<int>());
for (auto e : arr)
cout << e << endl;
vector<int> arr2({3, 2, 4, 1});
//count less than 3
int cnt = count_if(arr2.begin(), arr2.end(), bind(less<int>(), _1, 3));
cout << cnt << endl;
return 0;
}