2016-12-30 20 views
-1

以下のコードを使用してC++ 11の2つの2Dベクトル間に要素ごとの乗算(。*)を実行しようとしていますが、エラーが発生していますError 'std :: vector>'から 'const int &'に引き数1を変換できません。私は何を理解できませんでしたか?(訳注:実際の問題は?C++での2Dベクトルの要素ごとの乗算11

// 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

'std :: multiplies 'を使って2つのベクトルを乗算しようとしています。 – Zereges

+0

私は今問題を見る。指摘してくれてありがとう。 – user109260

答えて

0

を次のように

Iが使用されるコードであるRouteSpectrumベクトルの要素は、std::vector<int32_t>のインスタンスです。あなたのトランスフォームは上記のベクトルの繰り返しを呼び出します。ベクトルの代わりに、std::multiplies<int32_t>は引数が整数であると想定しています。エラーメッセージは、ベクトルから整数に変換する方法がないことを示しています。

代わりに、 "トップ"ベクトルを反復し、各サブベクトルを結果 "トップ"ベクトルのサブベクトルに変換することができます。

関連する問題