Pregunta

Tengo código que se parece a esto:

template<class T>
class list
{
public:
    class iterator;
};

template<class T>
class list::iterator
{
public:
    iterator();
protected:
    list* lstptr;
};

list<T>::iterator::iterator()
{
    //???
}

Quiero hacer el constructor de list::iterator para hacer punto iterator::lstptr a la lista que se llama a partir. Es decir:.

list xlst;
xlst::iterator xitr;
//xitr.lstptr = xlst

¿Cómo iba a hacer eso?

Y también, ¿verdad referenciando mi iterador-constructor de la derecha, o debería hacer algo como esto:

template<class T>
class list<T>::iterator
{
public:
    list<T>::iterator();
protected:
    list* lstptr;
};
¿Fue útil?

Solución

Puede pasar la lista para el constructor de iterador:

list xlst;
list::iterator xitr(xlst);

O, usted podría hacer una función de iterador de fábrica:

list xlst;
list::iterator xitr = xlst.create_iter();

En el caso de la función de la fábrica, la función create_iter() puede utilizar this para referirse a la lista de cerramiento.

Otros consejos

Dado que no es necesario cambiar (vuelva a asentar) el puntero y no hay necesidad de que el valor NULL, me gustaría utilizar en su lugar una referencia. También se puede utilizar una lista de inicialización cuando se asigna la variable miembro (y que si está utilizando una referencia).

template<class T>
class list::iterator
{
public:
    iterator( list& parent ) : lstptr( parent ){}

protected:
    list& lstptr;
};

Y como se mencionó antes: usar un método de fábrica dentro de la clase lista para construir objetos de tipo de lista :: iterador

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top