Я пишу коллекцию контейнеров и итераторов для среды, где 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, указатель в этом?
Типы членов итераторов не используются очень сильно. К счастью, вам не нужно их определять. Базовый класс 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 >
…
std::vector
? Подсказка:std::vector<int *>::pointer
isint **
.