动态数组:将两个动态数组中的元素值添加到新的动态数组中

时间:2014-09-23 18:04:14

标签: c++ arrays vector

嗨我有矢量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 ++中执行此操作?

2 个答案:

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