嗨我有矢量A和矢量B,每个都有3个元素。我想创建一个新的向量,在A和B中添加元素的值。 即。
NewVector[0] = A[0] + B[0]
NewVector[1] = A[1] + B[1]
NewVector[2] = A[2] + B[2]
我需要在一行中执行此命令,例如NewVector = A + B;但它不起作用。我如何在C ++中执行此操作?
答案 0 :(得分:0)
在std::transform
库中使用<algorithm>
。它通过传入的仿函数将集合“映射”到另一个集合中。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
template<typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec)
{
for (auto& el : vec)
{
os << el << ' ';
}
return os;
}
int main()
{
std::vector<int> a {1,10,100};
std::vector<int> b {2,20,200};
std::vector<int> c {};
std::transform(a.begin(), a.end(), b.begin(), std::back_inserter(c), std::plus<int>());
//Or you can use C++11 lambda:
//std::transform(a.begin(), a.end(), b.begin(), std::back_inserter(c), [](int x, int y){return x+y;});
std::cout << c << std::endl;
}
输出:
3 30 300
答案 1 :(得分:0)
以下是texasbruce已发布的更短版本:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> a = {1,2,3};
std::vector<int> b = {100,200,300};
std::vector<int> c;
std::transform(a.begin(), a.end(), b.begin(), back_inserter(c), [](int x, int y) {return x + y;});
std::for_each(c.begin(), c.end(), [](int x) { std::cout << x << std::endl; });
return 0;
}