Sirius' blog Sirius' blog
首页
  • 学习笔记

    • 《C++》
    • 《MATLAB》
    • 《Python》
  • 学习笔记

    • 《Git》
    • 《CMake》
  • 技术文档
  • 博客搭建
  • 学习
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Sirius0v0

怕什么真理无穷,进一寸有一寸的欢喜
首页
  • 学习笔记

    • 《C++》
    • 《MATLAB》
    • 《Python》
  • 学习笔记

    • 《Git》
    • 《CMake》
  • 技术文档
  • 博客搭建
  • 学习
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • Cpp小记
  • C++学习笔记-220705-V1
  • 进阶

    • CC++模板
    • CC++STL-常用容器
    • CC++STL-函数对象
      • 概念
      • 函数对象的使用
      • 谓词
        • 概念
        • 一元谓词
        • 二元谓词
      • 内建函数对象
    • CC++STL-常用算法
    • 现代C++:常量、变量与类型推导
    • 现代C++:函数式编程(lambda、函数对象包装器)
    • 现代C++:右值引用、移动语义与完美转发
    • 现代C++:智能指针
    • C++11多线程编程
  • 奇思妙用

  • 库的使用

  • 《C++》学习笔记
  • 进阶
Sirius0v0
2023-07-11
目录

CC++STL-函数对象

# C/C++:STL-函数对象

# 概念

  • 重载函数调用操作符的类,其对象称为函数对象;
  • 函数对象使用重载的()时行为类似函数调用,因而也叫仿函数;
  • 其本质是类而非函数。

# 函数对象的使用

因为其本质是类,因此拥有以下特点:

  • 可以像普通函数一样调用,可以有参数和返回值
  • 可以有自己的状态,比普通函数更丰富
  • 可以作为参数传递
class MyAdd
{
public:
    MyAdd():num(0){}
public:
    int operator()(int a, int b)
    {
        num++;
        return a + b;
    }
    int num;
};

调用:

MyAdd myadd;
cout << myadd(10, 20) << '\n';
cout << myadd(10, 20) << '\n';
cout << "调用次数:" << myadd.num << '\n';

# 谓词

# 概念

返回bool类型的仿函数称为谓词;接受一个参数是一元谓词,接受两个是二元谓词。

# 一元谓词

class GreaterFive
{
public:
    bool operator()(int v1)
    {
        return v1 > 5;
    }
};

# 二元谓词

class MyCompare
{
public:
    bool operator()(int v1, int v2)
    {
        return v1 > v2;
    }
};

# 内建函数对象

包含#include <functional>

分类:

  • 算术仿函数

    plus<T>
    minus<T>
    multiplies<T>
    divides<T>
    modulus<T>
    negate<T>
    
  • 关系仿函数

    equal_to<T>
    not_equal_to<T>
    greater<T>
    greater_equal<T>
    less<T>
    less_equal<T>
    

    应用示例:

    std::sort(v.begin(), v.end(), std::greater<int>());
    
  • 逻辑仿函数

    logical_and<T>
    logical_or<T>
    logical_not<T>
    
编辑 (opens new window)
#Cpp
上次更新: 2023/08/15, 01:36:48
CC++STL-常用容器
CC++STL-常用算法

← CC++STL-常用容器 CC++STL-常用算法→

最近更新
01
ipopt优化库配置及使用
07-21
02
ubuntu离线安装包的方法
07-21
03
其它控件的使用
03-05
更多文章>
Theme by Vdoing | Copyright © 2020-2024 Sirius0v0 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式