元素智能矢量乘法c ++(代码不工作)

New*_*ler 2 c++ vector

我无法理解为什么我的代码不起作用.我有两个向量和我想替换我的第二个向量与每个元素的产品(v2[0] = v1[0] * v2[0],v2[1] = v1[1] * v2[1]等...)

vector <float> vectorMultiplication(vector <float> &v1, vector <float> &v2)
{
    return std::transform(v1.begin(), v1.end(), v2.begin(), std::multiplies<float>() );
}
Run Code Online (Sandbox Code Playgroud)

如果有人能指出我的错误,我将非常感激.

PS我的编译器抛出的错误消息是: error: conversion from ‘__gnu_cxx::__normal_iterator<float*, std::vector<float> >’ to non-scalar type ‘std::vector<float>’ requested PS 2我正在运行C++ 98

Vit*_*meo 6

错误很明显:std::transform返回一个迭代器,你返回一个vector<float>,它不能由一个迭代器隐式构造.


此外,std::transform你试图调用的过载不是正确的,因为它接受一段UnaryOperation时间std::multiplies是一个BinaryOperation.你需要这个重载:

template< class InputIt1, class InputIt2, class OutputIt, class BinaryOperation >
OutputIt transform( InputIt1 first1, InputIt1 last1, InputIt2 first2, 
                    OutputIt d_first, BinaryOperation binary_op );
Run Code Online (Sandbox Code Playgroud)

以下代码将编译并工作:

auto vectorMultiplication(const std::vector<float>& v1, const std::vector<float>& v2)
{
    std::vector<float> result;
    std::transform(v1.begin(), v1.end(), v2.begin(), 
                   std::back_inserter(result), std::multiplies<float>());
    return result;
}
Run Code Online (Sandbox Code Playgroud)

coliru的例子


用法示例:

std::vector<float> v1 = {1, 2, 3, 4};
std::vector<float> v2 = {1, 2, 3, 4};

auto vm = vectorMultiplication(v1, v2);
for(const auto& x : vm) std::cout << x << " ";
Run Code Online (Sandbox Code Playgroud)

将打印:

1 4 9 16