C++11 C++;11

C++11 C++;11,c++11,vector,C++11,Vector,我试图使用下面的代码在C++11中的两个2D向量之间进行元素相乘(.*),但得到的错误是Error C2664'int std::multiplies::operator()(const _Ty&,const _Ty&)常量”:无法将参数1从“std::vector>”转换为“const int&”我无法找出实际的问题是什么 我使用的代码如下 // Example program #include <iostream> #include <string> #include

我试图使用下面的代码在C++11中的两个2D向量之间进行元素相乘(.*),但得到的错误是Error C2664'int std::multiplies::operator()(const _Ty&,const _Ty&)常量”:无法将参数1从“std::vector>”转换为“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;
        }
    }
}
//示例程序
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
向量路由={1,2},{3,4};
向量谱={2,2},{3,3};
std::向量得分;
//并对光谱和路线进行元素相乘,即光谱。*路线
std::transform(Spectrum.begin()+1,Spectrum.end(),Route.begin()+1,std::back_inserter(score),std::multiplies());
std::vector::迭代器行;
std::vector::迭代器列;
for(row=score.begin();row!=score.end();row++){
对于(col=行->开始()+1;col!=行->结束();col++){

std::coutRoute
Spectrum
向量的元素是
std::vector
的实例。您的转换调用在所提到的向量上迭代。而不是向量,
std::multiplies
期望参数为整数。错误消息告诉您无法将向量转换为整数整数


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

您正在尝试使用
std::multiples
将两个向量相乘。我现在看到了问题。感谢您指出。