【问题标题】:Sum values of 2 vectors [duplicate]2个向量的总和值[重复]
【发布时间】:2015-02-19 13:41:09
【问题描述】:

C++ 库中是否有任何实现的方法允许您对两个向量(当然大小和类型相同)的值求和?
例如:

std::vector<int> a;//looks like this: 2,0,1,5,0
std::vector<int> b;//looks like this: 0,0,1,3,5

现在将它们的值相加应该如下所示:

//2,0,2,8,5

我期待的答案是“不,没有”或“是”+方法。

【问题讨论】:

  • std::transform 的重载对来自两个范围的元素对进行操作。
  • 顺便说一句,我注意到有些人认为对这个问题投反对票是正确的。有什么具体原因吗?我至少很确定我已经遵守了关于正确提问的所有规则:|

标签: c++ vector std


【解决方案1】:

您可以使用std::transformstd::plus&lt;int&gt;()

std::vector<int> a;//looks like this: 2,0,1,5,0
std::vector<int> b;//looks like this: 0,0,1,3,5

// std::plus adds together its two arguments:
std::transform (a.begin(), a.end(), b.begin(), a.begin(), std::plus<int>());
// a = 2,0,2,8,5

std::transform 这种形式有 5 个参数:

  • 前两个是第一个序列的初始和最终位置的输入迭代器。
  • 第三个是第二个范围初始位置的输入迭代器。
  • 第四个是存储运算结果的范围的初始位置的输出迭代器。
  • 最后一个参数是一个二进制函数,它接受两个元素作为参数(两个序列中的一个),并返回一些可转换为 OutputIterator 指向的类型的结果值。

【讨论】:

  • 干杯,这正是我想要的:) 将尽快接受这个答案:p
  • 我更正了参数。两个 first 是第一个序列的初始和最终位置的输入迭代器。第三个是第二个范围的初始位置。第四个是存储运算结果的范围的初始位置。操作执行的最后一个。
  • 好的,这里是 Python 人,所以请多多包涵.. 不能用+ 符号添加向量(相同长度)?我需要做一些运算符重载吗?
  • @quapka 不,您不能使用+ 符号。我建议创建一个实现上述功能的函数。如果您决定重载 + 运算符,则应在全局范围内进行。
  • 当向量大小不同时这是否有效?
猜你喜欢
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多