2017-05-22 15 views
-1

次のコードは実行に失敗しています。デバッグしようとする試みから、関数とベクトルでテンプレートを使用する方法についていくつかの誤解があると思います。(C++)関数とベクトルを含むテンプレート

template<typename T> 
T minT(std::vector<T> data){ 
    T min = data[0]; 
    for(int i=0; i< data.size(); i++){ 
     if(data[i] < min){ 
      min =data[i]; 
     } 
    } 
    return min; 
} 


template<typename T> 
void Hist(std::vector<T> data, T increment){ 
    T max = maxT<T>(data); 
    T min = minT<T>(data); 
} 


int main(int argc, char** argv) { 
    std::vector<int> v; 

    Hist(v,2); 

    return 0; 
} 
+3

'v'は空であるので、'データが[0] '違法です。 – aschepler

+1

['std :: min_element'](http://en.cppreference.com/w/cpp/algorithm/min_element) と[' std :: max_element'](http://en.cppreference。 com/w/cpp/algorithm/max_element)? –

+0

'Hist'をビルドしようとする前に' minT'をテストしておかなければなりません。 – Beta

答えて

1

問題は、次のとおりです。

  • あなたはmaxT機能を定義していませんでした。
  • std::vectorには、それ自体で構成するか、またはそれに追加する値が決して与えられていないため、[0]要素はありません。

これらの2つの問題を修正すると、コードが正常に動作しているように見えます。便宜と正確さのために<vector><iostream>が追加されました。

See it live on Coliru.

関連する問題