2011-01-22 4 views
1

Так как присвоение класса я реализовав std::vector, и у меня возникают проблемы с объявить прототип:Как объявить прототип функции, который возвращает std-итератор?

iterator insert (iterator position, const T& x); 

Шаблон для моего класса итератора выглядит следующим образом

template<typename T> 
class VectorIterator : public std::iterator<std::input_iterator_tag, T> 

шаблоне для моего класса вектора выглядит так:

template<typename T> 
class Vector 

Как я могу объявить прототип для вставки для возврата std::iterator вместо моего собственного VectorIterator класс? Конечно, я верну экземпляр своего собственного класса VectorIterator.

+1

Вы должны использовать 'random_access_iterator_tag' для класса' vector', а не 'input_iterator_tag'. –

ответ

4

Эта функция не возвращает std::iterator; он возвращает std::vector<T, Alloc>::iterator. Вам нужно ваше VectorIterator определение типа во в вашем Vector:

template <typename T> 
class Vector { 
    typedef VectorIterator<T> iterator; 
}; 

Это тип возврата функции insert. Любые ссылки на iterator и const_iterator в спецификации std::vector относятся к typedefs, которые вам необходимо предоставить.

Смежные вопросы