7

次のインターフェースで並べ替えがあります。

template< class RandomIt >
void my_sort( RandomIt first, RandomIt last )
{

}

RandomItからのイテレータstd::vector<T>.begin()/end()またはプレーンなポインタ型であると期待していますT* first,T* lastRandomItがベクトルであると仮定すると、 から取得できると思いますRandomIt::value_typeが、これは では機能しませんT* first,T* last

value_type T私の質問は、どちらの場合もテンプレート パラメーターからどのように抽出できますか?

4

2 に答える 2

16

iterator_traits<T>::value_type( cppreference )を使用します。T*標準ライブラリはとの iterator_traits 定義を提供するconst T*ため、プレーンなポインターでも機能することに注意してください。

于 2013-01-21T04:47:02.350 に答える
5

C ++ 11を使用しているのでdecltype、イテレータ自体に適用してvalue_type:を取得できます。

typedef decltype(*first) value_type;

プログラマーがイテレーターに特化していない場合、またはプログラマーが標準要件を満たすイテレーターを定義していない場合、注iterator_traitsはプログラマー定義の型では機能しない可能性があります。iterator_traits

ただし、そのdecltypeトリックはそれでも機能します。

于 2013-01-21T05:04:42.407 に答える