我需要在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()
。我确信已经实现了某种标准功能。
答案 0 :(得分:3)
您只需再次传递lhs.begin()
:您想要使用新值覆盖lhs
的现有值。