使用`std :: transform`进行向量加法赋值

时间:2014-06-20 10:21:34

标签: c++ c++11 vector stl

我需要在std::transform中使用哪种输出迭代器来实现向量添加分配:

template<typename T>
std::vector<T>& operator+=(std::vector<T>& lhs, std::vector<T> const& rhs)
{
    if (lhs.size() == rhs.size())
    {
        std::transform(lhs.begin(), lhs.end(), rhs.begin(), /*Output Iterator*/, std::plus<T>());
        return lhs;
    }
    throw std::invalid_argument("operands must be of same size");
}

std::transform按以下方式实施:

template<class InputIt1, class InputIt2, 
         class OutputIt, class BinaryOperation>
OutputIt transform(InputIt first1, InputIt last1, InputIt first2, 
                   OutputIt d_first, BinaryOperation binary_op)
{
    while (first1 != last1) {
        *d_first++ = binary_op(*first1++, *first2++);
    }
    return d_first;
}

因此,OutputIt需要从lhs.begin()开始,并将所有值替换为lhs.end()。我确信已经实现了某种标准功能。

1 个答案:

答案 0 :(得分:3)

您只需再次传递lhs.begin():您想要使用新值覆盖lhs的现有值。