elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  "return" no esta funcionando bien al devolver un iterador
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: "return" no esta funcionando bien al devolver un iterador  (Leído 2,241 veces)
Kasswed
Colaborador
***
Desconectado Desconectado

Mensajes: 5.295

Rolling Stones


Ver Perfil
"return" no esta funcionando bien al devolver un iterador
« en: 9 Mayo 2012, 13:17 pm »

Buenas!

Estoy intentando devolver un iterador en una clase, pero al devolverlo toma valores aleatorios (he comprobado que antes de devolverlo está bien). No sé qué puede estar fallando.

El problema está en la función begin() que os pongo, en el return creo. Esto me está dando un montón de problemas...

Os pongo un poco de código:

Código
  1. template <typename T>
  2. class vectorDinamico {
  3.    private:
  4.        list<vector<T> > datos;
  5.        int tamBloque;
  6.    public:
  7.        vectorDinamico();
  8.        vectorDinamico ( int tam );
  9.        ~vectorDinamico();
  10.        vectorDinamico<T>& operator= ( const vectorDinamico<T> &v );
  11.        vectorDinamico ( const vectorDinamico<T> &v );
  12.  
  13.        class iterator;
  14.        friend class iterator;
  15.  
  16.        /* Clase iterator */
  17.        class iterator {
  18.            private:
  19.                typename list<vector<T> >::iterator it_l;
  20.                typename vector<T>::iterator it_v;
  21.                friend class vectorDinamico;
  22.            public:
  23.                /* Implementamos algunos métodos del iterador */
  24.                iterator();
  25.                iterator ( const typename vectorDinamico<T>::iterator &it );
  26.                iterator& operator++();
  27.                iterator& operator--();
  28.                T& operator*();
  29.                iterator& operator= ( const typename vectorDinamico<T>::iterator &it );
  30.            };
  31.        /* Fin clase iterator */
  32.        iterator begin();
  33.        iterator end();
  34.  
  35.  
  36. template <typename U> friend ostream& operator<<(ostream& out,const vectorDinamico<U> &v);
  37.  
  38.        void insert ( iterator it, const T &x );
  39.    };
  40.  
  41.  
  42. template <typename T>
  43. vectorDinamico<T>::iterator::iterator() {}
  44.  
  45. template <typename T>
  46. vectorDinamico<T>::iterator::iterator ( const typename vectorDinamico<T>::iterator &it ) {
  47.    it_l = it.it_l;
  48.    it_v = it.it_v;
  49.    }
  50.  
  51.  
  52. template <typename T>
  53. typename vectorDinamico<T>::iterator vectorDinamico<T>::begin() {
  54.    typename vectorDinamico<T>::iterator it;
  55.    vector<T> aux;
  56.    it.it_l = datos.begin();
  57.    aux = *it.it_l;
  58.    it.it_v = aux.begin();
  59.    return it;
  60.    }
  61.  
  62. template <typename T>
  63. typename vectorDinamico<T>::iterator& vectorDinamico<T>::iterator::operator= ( const typename vectorDinamico<T>::iterator &it ) {
  64.    it_l = it.it_l;
  65.    it_v = it.it_v;
  66.    return *this;
  67.    }
  68.  
  69. template <typename T>
  70. T& vectorDinamico<T>::iterator::operator*() {
  71.    return *it_v;
  72.    }

¿Alguien sabe qué esta fallando?

Decir que devolver el iterador por referencia no lo veo viable, puesto que it se destruye al salir de la función... ¿no?

Saludos!


En línea

"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.
Kasswed
Colaborador
***
Desconectado Desconectado

Mensajes: 5.295

Rolling Stones


Ver Perfil
Re: "return" no esta funcionando bien al devolver un iterador
« Respuesta #1 en: 9 Mayo 2012, 13:42 pm »

Problema resuelto..

No había caído en que el vector aux se elimina, así que no se puede usar así. Lo he resuelto haciendo:

Código
  1. template <typename T>
  2. typename vectorDinamico<T>::iterator vectorDinamico<T>::begin() {
  3.    typename vectorDinamico<T>::iterator it;
  4.    it.it_l = datos.begin();
  5.    it.it_v = (*it.it_l).begin();
  6.    return it;
  7.    }


En línea

"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines