C++plus minus multiplies divides函数对象
C++中的plus, minus, multiplies和divides函数对象
在C++中,标准库提供了许多有用的函数对象(也称为仿函数),这些函数对象可以像普通函数一样被调用,但它们还具有状态或其他特性。本文将详细介绍四个常用的函数对象:std::plus、std::minus、std::multiplies和std::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::plus、std::minus、std::multiplies和std::divides。这些函数对象分别用于执行加法、减法、乘法和除法操作。通过使用这些函数对象,我们可以简化代码并提高其可读性。希望本文能帮助你更好地理解和使用这些强大的工具。


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