C ++ 11中2D向量的元素乘法

时间:2016-12-30 20:17:50

标签: c++11 vector

我正在尝试使用下面的代码在C ++ 11中的两个2​​D向量之间进行元素乘法(。*),但我得到的错误是错误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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

RouteSpectrum向量的元素是std::vector<int32_t>的实例。你的变换调用遍历提到的向量。 std::multiplies<int32_t>不是向量,而是期望参数是整数。错误消息告诉您无法将向量转换为整数。

您可以改为迭代“顶部”向量,并将每个子向量转换为结果“顶部”向量的子向量。

相关问题