我是 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,这将非常有帮助。