2

イテレータ パラメータから値の型を取得しようとしています。どうすればそれができますか?私はそれをグーグルで検索し、いくつかの iterator_trait 機能を見ましたが、関数にそれを実装する方法を理解できませんでした。T としてテンプレート化されたイテレータは、整数または浮動小数点数のいずれかを取ることができます。次の関数では、整数または浮動小数点数のコンテナーを反復処理し、値の型に応じて、それらを新しいベクター コンテナーに格納しようとしています。

要約すると、任意のイテレータから値型情報を取得するにはどうすればよいですか

template<typename T>
void Merge_Function(T begin, T mid, T end) {
    vector<auto> left_half (begin, mid);
    left_half.push_back(INFINITE);
    vector<auto> right_half (mid+1, end);
    right_half.push_back(INFINITE);
}

更新:私がやろうとしているのは、インプレース マージ ソートのようなものです。

vector<int> numbers = {5, 6, 3, 4, 1, 2, 7, 13, -6, 0, 3, 1, -2};
vector<int> L_half(numbers.begin(), numbers.end());

これは機能するので、次のように同様のことを試します

 template<typename T>
 void practice(T begin, T end) {
   auto length = end - begin;
   auto mid = length/2;
   typedef typename std::iterator_traits<T>::value_type value_type;
   vector<value_type> L_half(begin, mid);
   vector<value_type> R_half(mid+1, end);
   R_half.push_back(10000);
   }

だから私が呼び出すメイン関数で

   practice(numbers.begin(), numbers.end());

そして最初に私は以下を含めています

 #include <iostream>
 using namespace std;
 #include <algorithm>
 #include <vector>
 #include <iterator>

 template<typename T>
 void practice(T begin, T end);

しかし、行ベクトル L_half(begin, mid);

エラーが発生しています

     /~~/main.cpp:105:14: No matching constructor for initialization of 'vector<int>'

macbook air を最新バージョンで使用しています。

4

1 に答える 1