Estoy tratando de implementar un adaptador de iterador inverso para mis clases iterator y const_iterator con un poco de problema. ¡Si alguien pudiera guiarme a través de esto, sería muy apreciado!reverse_iterator adapter
La idea es que yo debería ser capaz de crear un reverso-iterador de mi rbegin() y rend() las llamadas a funciones
reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
estoy usando los siguientes de typedef en la clase:
typedef btree_iterator<T> iterator;
typedef const_btree_iterator<T> const_iterator;
typedef reverse_btree_iterator<iterator> reverse_iterator;
typedef reverse_btree_iterator<const_iterator> const_reverse_iterator;
Como puede ver, me gustaría poder crear iteradores inversos utilizando plantillas, dando a la clase reverse_iterator un iterador o const_iterator.
Por desgracia, esto es lo poco que estoy atascado en ...
A continuación se muestra la definición de clase que tengo actualmente, con errores.
template <typename I> class reverse_btree_iterator {
typedef ptrdiff_t difference_type;
typedef bidirectional_iterator_tag iterator_category;
public:
reverse_btree_iterator() : base_(I()) {}
template <typename T> reverse_btree_iterator(const btree_iterator<T>& rhs) : base_(rhs) {}
I base() { return base_; }
I::reference operator*() const;
I::pointer operator->() const;
I& operator++();
I operator++(int);
I& operator--();
I operator--(int);
bool operator==(const I& other) const;
bool operator!=(const I& other) const;
private:
I base_;
};
nunca he utilizado las plantillas como esto antes, así que es muy probable que estoy malentendido completamente la forma en que se pueden utilizar ...
Desde que puedo ser un iterador o una const_iterator, la typedef de referencia y puntero varían entre las dos clases. Las líneas que no están compilando son estos:
I::reference operator*() const;
I::pointer operator->() const;
No estoy seguro de qué otra manera puedo hacer el trabajo de la clase uno reverse_iterator tanto para iterador y const_iterator si no soy capaz de hacer yo :: referencia y I :: puntero. También he intentado añadir la plantilla en frente de ellos, ya que se definen en la clase de iterador (por ejemplo):
typedef T* pointer;
typedef T& reference;
+1 por valentía. –
Puntero/referencia de Arent definido como 'const T *' y 'const T &' en const_iterator que está intentando adaptar? – gwiazdorrr
'template' está bastante cerca. Accesorios. – Puppy