📅  最后修改于: 2023-12-03 15:23:22.693000             🧑  作者: Mango
std::plus
是一个函数对象,它在C++的标准库中定义在<functional>
中。它通过使用+
运算符来执行参数之间的加法操作,并返回其结果。以下是一个示例:
#include <iostream>
#include <functional>
int main() {
std::plus<int> add;
int result = add(4, 6);
std::cout << result << std::endl; // 输出结果10
return 0;
}
在上面的代码示例中,我们通过创建std::plus<int>
函数对象并将其分配给add
变量来定义加法操作。然后,我们调用该对象,将4和6传递给它,并将结果分配给result
变量。最后,我们输出result
的值,因此我们得到了10。
std::plus
函数对象还可以用于自定义类型,只要该类型支持+
运算符即可。例如,我们可以使用std::vector
类型:
#include <iostream>
#include <vector>
#include <functional>
int main() {
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {4, 5, 6};
std::plus<std::vector<int>> add;
std::vector<int> result = add(v1, v2);
for (auto item : result) {
std::cout << item << " "; // 输出结果5 7 9
}
return 0;
}
在上面的代码示例中,我们定义了两个由整数组成的向量v1
和v2
,然后使用std::plus<std::vector<int>>
函数对象来执行向量之间的加法操作。我们将v1
和v2
作为参数传递给该函数对象,并将结果分配给一个名为result
的新向量。最后,我们遍历result
并打印所有元素的值。
标准库算法通常使用函数对象进行比较、转换和其他操作。例如,std::transform
算法接受两个迭代器范围和一个函数对象,并将函数对象应用于范围中的每个元素。以下是一个示例:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
int main() {
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {4, 5, 6};
std::vector<int> result(v1.size());
std::plus<int> add;
std::transform(v1.begin(), v1.end(), v2.begin(), result.begin(), add);
for (auto item : result) {
std::cout << item << " "; // 输出结果5 7 9
}
return 0;
}
在上面的代码示例中,我们使用std::transform
算法和一个std::plus<int>
函数对象来执行v1
和v2
之间的加法操作。我们创建一个名为result
的新向量,将函数对象传递给std::transform
,并将结果存储在result
中。最后,我们遍历result
并打印所有元素的值。
注意,我们需要将std::transform
的第四个参数设置为一个迭代器,该迭代器指向存储结果的输出范围。在本例中,我们使用result.begin()
将结果存储在result
向量中。