【c++STL算数仿函数,关系仿函数,逻辑仿函数】

文章目录

      • [C++ STL中的算数、关系和逻辑仿函数](#C++ STL中的算数、关系和逻辑仿函数)
      • [1. 算数仿函数](#1. 算数仿函数)
      • [2. 关系仿函数](#2. 关系仿函数)
      • [3. 逻辑仿函数](#3. 逻辑仿函数)

C++ STL中的算数、关系和逻辑仿函数

STL(Standard Template Library)是C++标准库的一部分,提供了许多强大的工具和功能,其中包括仿函数(function object)。仿函数是一种类或结构体,类似函数指针,可被用于执行函数调用。在STL中,有三种重要的仿函数类型:算数、关系和逻辑仿函数。

1. 算数仿函数

算数仿函数用于执行基本的数学运算,如加法、减法、乘法和除法。STL提供了几个算数仿函数,包括 plus、minus、multiplies 和 divides。

实战示例:

cpp 复制代码
#include <iostream>
#include <functional>

int main() {
    std::plus<int> add;
    std::minus<int> subtract;
    std::multiplies<int> multiply;
    std::divides<int> divide;

    int a = 10, b = 5;

    // 使用算数仿函数执行运算
    std::cout << "Addition: " << add(a, b) << std::endl;
    std::cout << "Subtraction: " << subtract(a, b) << std::endl;
    std::cout << "Multiplication: " << multiply(a, b) << std::endl;
    std::cout << "Division: " << divide(a, b) << std::endl;

    return 0;
}

2. 关系仿函数

关系仿函数用于比较两个值的关系,返回布尔值,如 greater、less、equal_to 等。这些仿函数可以用于容器的排序和查找算法。

实战示例:

cpp 复制代码
#include <iostream>
#include <functional>

int main() {
    std::greater<int> greater_than;
    std::less<int> less_than;
    std::equal_to<int> equal;

    int x = 10, y = 5;

    // 使用关系仿函数比较值的关系
    std::cout << "x > y: " << greater_than(x, y) << std::endl;
    std::cout << "x < y: " << less_than(x, y) << std::endl;
    std::cout << "x == y: " << equal(x, y) << std::endl;

    return 0;
}

3. 逻辑仿函数

逻辑仿函数执行逻辑运算,比如逻辑与、逻辑或和逻辑非。STL中提供了 logical_and、logical_or、logical_not 等仿函数。

实战示例:

cpp 复制代码
#include <iostream>
#include <functional>

int main() {
    std::logical_and<bool> logic_and;
    std::logical_or<bool> logic_or;
    std::logical_not<bool> logic_not;

    bool p = true, q = false;

    // 使用逻辑仿函数执行逻辑运算
    std::cout << "p && q: " << logic_and(p, q) << std::endl;
    std::cout << "p || q: " << logic_or(p, q) << std::endl;
    std::cout << "!p: " << logic_not(p) << std::endl;

    return 0;
}
相关推荐
Dream it possible!11 分钟前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊36 分钟前
算法之双指针系列(一)
算法·leetcode
十二1 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
心祭丫丫1 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
露天赏雪2 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
小此方2 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi2 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH3 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi3 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
yeccheng4 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试