我无法理解为什么我的代码不起作用.我有两个向量和我想替换我的第二个向量与每个元素的产品(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
错误很明显: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)
用法示例:
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
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |