Я новичок в C ++, так что терпите меня. Я пытаюсь понять STL iterator_traits. В книге "The C ++ Stand" ard 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
? Мое замешательство, кажется, возникает из-за моего (безусловно, неверного)понимание того, что информация о подтипах должна быть получена из шаблона
, используемого для создания экземпляра iterator_trait. Так что, если бы вы могли объяснить, и желательно на примере, зачем и где мне нужен iterator_traits, это было бы очень полезно.