C++plus minus multiplies divides函数对象

2026-04-02 21:05:33 1199阅读 0评论

C++中的plus, minus, multipliesdivides函数对象

在C++中,标准库提供了许多有用的函数对象(也称为仿函数),这些函数对象可以像普通函数一样被调用,但它们还具有状态或其他特性。本文将详细介绍四个常用的函数对象:std::plusstd::minusstd::multipliesstd::divides

函数对象的基本概念

函数对象是一种重载了operator()运算符的类或结构体。通过这种方式,我们可以创建一个类的对象,该对象的行为就像一个函数一样。函数对象的主要优点是可以在编译时捕获状态,而普通函数则不能。

例如:

class Adder {
public:
    int operator()(int a, int b) const {
        return a + b;
    }
};

int main() {
    Adder adder;
    int result = adder(3, 4); // result is 7
    return 0;
}

在这个例子中,Adder类定义了一个重载了operator()的成员函数,使得adder对象可以像函数一样被调用。

std::plus函数对象

std::plus是C++标准库中的一个函数对象,用于执行两个值的加法操作。它的定义在<functional>头文件中。

使用示例

#include <iostream>
#include <functional>

int main() {
    std::plus<int> plusOp;
    int result = plusOp(3, 4); // result is 7
    std::cout << "Result: " << result << std::endl;
    return 0;
}

实际应用

std::plus常用于需要进行元素级加法操作的算法中。例如,在STL容器中使用std::transform函数对两个容器进行逐元素加法操作:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};
    std::vector<int> result(vec1.size());

    std::transform(vec1.begin(), vec1.end(), vec2.begin(), result.begin(), std::plus<int>());

    for (int i : result) {
        std::cout << i << " "; // Output: 5 7 9
    }

    return 0;
}

std::minus函数对象

std::minus是C++标准库中的另一个函数对象,用于执行两个值的减法操作。它的定义同样在<functional>头文件中。

使用示例

#include <iostream>
#include <functional>

int main() {
    std::minus<int> minusOp;
    int result = minusOp(7, 4); // result is 3
    std::cout << "Result: " << result << std::endl;
    return 0;
}

实际应用

std::minus常用于需要进行元素级减法操作的算法中。例如,在STL容器中使用std::transform函数对两个容器进行逐元素减法操作:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

int main() {
    std::vector<int> vec1 = {7, 6, 5};
    std::vector<int> vec2 = {4, 5, 6};
    std::vector<int> result(vec1.size());

    std::transform(vec1.begin(), vec1.end(), vec2.begin(), result.begin(), std::minus<int>());

    for (int i : result) {
        std::cout << i << " "; // Output: 3 1 -1
    }

    return 0;
}

std::multiplies函数对象

std::multiplies是C++标准库中的一个函数对象,用于执行两个值的乘法操作。它的定义也在<functional>头文件中。

使用示例

#include <iostream>
#include <functional>

int main() {
    std::multiplies<int> multipliesOp;
    int result = multipliesOp(3, 4); // result is 12
    std::cout << "Result: " << result << std::endl;
    return 0;
}

实际应用

std::multiplies常用于需要进行元素级乘法操作的算法中。例如,在STL容器中使用std::transform函数对两个容器进行逐元素乘法操作:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};
    std::vector<int> result(vec1.size());

    std::transform(vec1.begin(), vec1.end(), vec2.begin(), result.begin(), std::multiplies<int>());

    for (int i : result) {
        std::cout << i << " "; // Output: 4 10 18
    }

    return 0;
}

std::divides函数对象

std::divides是C++标准库中的一个函数对象,用于执行两个值的除法操作。它的定义同样在<functional>头文件中。

使用示例

#include <iostream>
#include <functional>

int main() {
    std::divides<int> dividesOp;
    double result = dividesOp(10, 3); // result is approximately 3.33333
    std::cout << "Result: " << result << std::endl;
    return 0;
}

实际应用

std::divides常用于需要进行元素级除法操作的算法中。例如,在STL容器中使用std::transform函数对两个容器进行逐元素除法操作:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

int main() {
    std::vector<double> vec1 = {10, 8, 6};
    std::vector<double> vec2 = {2, 4, 3};
    std::vector<double> result(vec1.size());

    std::transform(vec1.begin(), vec1.end(), vec2.begin(), result.begin(), std::divides<double>());

    for (double i : result) {
        std::cout << i << " "; // Output: 5 2 2
    }

    return 0;
}

总结

本文介绍了C++标准库中的四个常用函数对象:std::plusstd::minusstd::multipliesstd::divides。这些函数对象分别用于执行加法、减法、乘法和除法操作。通过使用这些函数对象,我们可以简化代码并提高其可读性。希望本文能帮助你更好地理解和使用这些强大的工具。

文章版权声明:除非注明,否则均为Dark零点博客原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
验证码
评论列表 (暂无评论,1199人围观)

还没有评论,来说两句吧...

目录[+]