Я новичок в С++, поэтому, пожалуйста, несите меня. Я пытаюсь понять STL iterator_traits. В книге "Стандартная библиотека С++" структура 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, что было бы очень полезно.