可调用对象

  1. 函数
  2. 函数指针
  3. 重载了函数调用的类。即重载了operator()。
  4. 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;
}