私はC++が初めてなので、ご容赦ください。STL を理解しようとしていますiterator_traits
。本「The C++ Standard Library」では、構造iterator_traits
は次のように定義されています。
template <class T>
struct iterator_traits {
typedef typename T::value_type value_type;
typedef typename T::difference_type difference_type;
typedef typename T::iterator_category iterator_category;
typedef typename T::pointer pointer;
typedef typename T::reference reference;
};
T
したがって、すでに公開されているサブタイプを再公開しているように思えます。さらに先に進むと、本はそれを使用する方法の例を示しています。これは次のようなものです。
template <class MyIterator>
void do_something(MyIterator start, MyIterator end) {
typedef typename iterator_traits<MyIterator>::value_type value_type;
value_type v = *start;
.....
}
私の質問は、なぜiterator_traits
ここでこの構造が必要なのかというvalue_type
ことMyIterator
です. 私の混乱は、サブタイプの情報template <class T>
がiterator_trait
. したがって、できれば例を挙げて説明できれば、非常に役立つ iterator_traits が必要な理由と場所を教えてください。