C ++, когда и как используются std :: iterator value_type, ссылка, указатель?

0

Я пишу коллекцию контейнеров и итераторов для среды, где STL и Boost находятся за столом. Я немного борюсь с контейнерами, такими как Vector, которые могут содержать как типы значений, так и типы указателей, когда дело касается обработки итераторов и их типов возврата - например, с помощью функции GetValue. Это еще больше осложняется желанием поддерживать константные итераторы. Я видел здесь определение целого ряда признаков: value_type, reference, pointer. Мой вопрос в том, как они используются в контексте создания итераторов? По сути, учитывая, что я хочу

Object & Vector<Object>::Iterator::GetValue()
Object * Vector<Object*>::Iterator::GetValue() 
const Object & Vector<Object>::ConstIterator::GetValue()
const Object * Vector<Object*>::ConstIterator::GetValue()

Как значение value_type, reference, указатель в этом?

  • 0
    Вы пытались посмотреть, что делает std::vector ? Подсказка: std::vector<int *>::pointer is int ** .
  • 0
    @Potatoswatter Да, ясно, что указатель std :: vector <int *> :: это **. Мой вопрос касается того, как они используются в контексте создания правильной подписи для возвращаемого типа итератора.
Теги:
pointers
templates
iterator
reference

1 ответ

1

Типы членов итераторов не используются очень сильно. К счастью, вам не нужно их определять. Базовый класс std::iterator делает это за вас.

template< typename value_type >
struct my_vector_iterator
    : std::iterator< std::random_access_iterator_tag, value_type >
    …

template< typename value_type >
struct my_vector_const_iterator
    : std::iterator< std::random_access_iterator_tag, value_type const >
    …
  • 0
    Как я уже говорил, STL недоступен для меня в этих обстоятельствах, но спасибо, что указали на то, что происходит. В этих случаях 'value_type' это просто T или T *, если контейнер содержит указатели на тип t?
  • 0
    @ Стивен Да, это так просто. Если контейнер содержит указатели, его реализация будет включать указатели на указатели, но никогда (никогда) указатель на тип напрямую.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню