📜  在C++中的std :: plus(1)

📅  最后修改于: 2023-12-03 15:23:22.693000             🧑  作者: Mango

C++中的std::plus

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;
}

在上面的代码示例中,我们定义了两个由整数组成的向量v1v2,然后使用std::plus<std::vector<int>>函数对象来执行向量之间的加法操作。我们将v1v2作为参数传递给该函数对象,并将结果分配给一个名为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>函数对象来执行v1v2之间的加法操作。我们创建一个名为result的新向量,将函数对象传递给std::transform,并将结果存储在result中。最后,我们遍历result并打印所有元素的值。

注意,我们需要将std::transform的第四个参数设置为一个迭代器,该迭代器指向存储结果的输出范围。在本例中,我们使用result.begin()将结果存储在result向量中。