如何逐个添加两个 STL 向量的元素?

2021-12-21 00:00:00 vector c++ stl

这个问题很愚蠢,但我需要以一种非常有效的方式来做――它将在我的代码中再次执行.我有一个返回向量的函数,我必须将返回的值逐个元素添加到另一个向量中.很简单:

The question is quite dumb, but I need to do it in a very efficient way - it will be performed over an over again in my code. I have a function that returns a vector, and I have to add the returned values to another vector, element by element. Quite simple:

vector<double> result;
vector<double> result_temp
for(int i=0; i< 10; i++) result_temp.push_back(i);

result += result_temp //I would like to do something like that.
for(int i =0; i< result_temp.size();i++)result[i] += result_temp[i]; //this give me segfault

我想做的数学运算是

u[i] = u[i] + v[i] 对于所有的 i

u[i] = u[i] + v[i] for all i

可以做什么?

谢谢

添加了一个简单的初始化,因为这不是重点.结果应该如何初始化?

added a simple initialization, as that is not the point. How should result be initialized?

推荐答案

如果您尝试将一个 vector 附加到另一个,您可以使用以下类似的方法.这些来自我的一个实用程序库 - std::vector 的两个 operator+= 重载:一个将单个元素附加到 vector,另一个附加整个vector:

If you are trying to append one vector to another, you can use something like the following. These are from one of my utilities libraries--two operator+= overloads for std::vector: one appends a single element to the vector, the other appends an entire vector:

template <typename T>
std::vector<T>& operator+=(std::vector<T>& a, const std::vector<T>& b)
{
    a.insert(a.end(), b.begin(), b.end());
    return a;
}

template <typename T>
std::vector<T>& operator+=(std::vector<T>& aVector, const T& aObject)
{
    aVector.push_back(aObject);
    return aVector;
}

如果您正在尝试执行求和(即,创建一个新的 vector 包含其他两个 vector 的元素之和),您可以使用一些东西像下面这样:

If you are trying to perform a summation (that is, create a new vector containing the sums of the elements of two other vectors), you can use something like the following:

#include <algorithm>
#include <functional>

template <typename T>
std::vector<T> operator+(const std::vector<T>& a, const std::vector<T>& b)
{
    assert(a.size() == b.size());

    std::vector<T> result;
    result.reserve(a.size());

    std::transform(a.begin(), a.end(), b.begin(), 
                   std::back_inserter(result), std::plus<T>());
    return result;
}

您可以类似地实现 operator+= 重载.

You could similarly implement an operator+= overload.

相关文章