我正在尝试使用下面的代码在C ++ 11中的两个2D向量之间进行元素乘法(。*),但我得到的错误是错误C2664' int std :: multiplies :: operator()(const _Ty&,const _Ty&)const' :无法从' std :: vector>'转换参数1 to' const int&' 我无法弄清楚实际问题是什么?
我使用的代码如下
// Example program
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>
int main()
{
std::vector<std::vector<int32_t>> Route = { { 1,2 },{ 3,4 } };
std::vector<std::vector<int32_t>> Spectrum = { { 2,2 },{ 3,3 } };
std::vector<std::vector<int32_t>> score;
//and do element-wise multiplication of Spectrum and Route i.e. Spectrum .* Route
std::transform(Spectrum.begin() + 1, Spectrum.end(), Route.begin() + 1, std::back_inserter(score), std::multiplies<int32_t>());
std::vector< std::vector<int32_t> >::iterator row;
std::vector<int32_t>::iterator col;
for (row = score.begin(); row != score.end(); row++) {
for (col = row->begin() + 1; col != row->end(); col++) {
std::cout << *col << std::endl;
}
}
}
答案 0 :(得分:0)
Route
和Spectrum
向量的元素是std::vector<int32_t>
的实例。你的变换调用遍历提到的向量。 std::multiplies<int32_t>
不是向量,而是期望参数是整数。错误消息告诉您无法将向量转换为整数。
您可以改为迭代“顶部”向量,并将每个子向量转换为结果“顶部”向量的子向量。