Página principal   Lista alfabética   Lista de componentes   Lista de archivos   Miembros de las clases   Páginas relacionadas  

vector.h

00001 
00008 #ifndef _vector_T_h
00009 #define _vector_T_h
00010 
00011 #include <cassert>
00012 
00031 template <class T>
00032 class Vector {
00033   private:
00052     T * datos; 
00053     int nelementos; 
00054   public:
00055     // ---------------  Constructores ----------------
00063     Vector<T>(int n=0);
00064     Vector<T>(const Vector<T>& original);
00065     // ------------------ Destructor ------------------
00066     ~Vector<T>();
00067     // --------------- Otras funciones ---------------
00074     int size() const;
00081     T& operator[] (int i);
00088     const T& operator[] (int i) const;
00096     void resize(int n);
00097     Vector<T>& operator= (const Vector<T>& original);
00098     // ---------------  Iteradores -----------------
00099     class const_iterador; // Para poder decir que es amiga de iterador
00100 
00111     class iterador {
00112         private:
00113           T* puntero;
00114         public:
00115           iterador(): puntero(0)
00116               {}
00117           iterador(const iterador& v): puntero(v.puntero)
00118               {}
00119           ~iterador()
00120               {}
00121           iterador& operator= (const iterador& orig)
00122               { puntero=orig.puntero; return *this;}
00123           T& operator*() const
00124               { assert(puntero!=0);return *puntero; }
00125           iterador& operator++()
00126               {assert(puntero!=0);puntero++;return *this;}
00127           iterador& operator--()
00128               {assert(puntero!=0);puntero--;return *this;}
00129           bool operator!=(const iterador& v) const
00130               {return puntero!=v.puntero;}
00131           bool operator==(const iterador& v) const
00132               {return puntero==v.puntero;}
00133           friend class Vector<T>;
00134           friend class const_iterador;
00135     };
00136 
00147    class const_iterador {
00148         private:
00149           const T* puntero;
00150           const_iterador(const T* p): puntero(p) {}
00151         public:
00152           const_iterador(): puntero(0) {}
00153           const_iterador(const const_iterador& v): puntero(v.puntero)
00154                 {}
00155           ~const_iterador()
00156                 {}
00157           const_iterador& operator= (const const_iterador& orig)
00158                 { puntero=orig.puntero; return *this;}
00159           const_iterador(iterador v): puntero(v.puntero)
00160                 {}
00161           const T& operator*() const
00162                 {assert(puntero!=0);return *puntero; }
00163           const_iterador& operator++()
00164                 {assert(puntero!=0);puntero++;return*this;}
00165           const_iterador& operator--()
00166                 {assert(puntero!=0);puntero--;return *this;}
00167           bool operator!=(const const_iterador& v) const
00168                 {return puntero!=v.puntero; }
00169           bool operator==(const const_iterador& v) const
00170                 {return puntero==v.puntero; }
00171           friend class Vector<T>;
00172      };
00173 
00174     // -------------------- miembros para la iteración ----------------------
00175     iterador begin() { iterador i; i.puntero= datos; return i;}
00176     iterador end() { iterador i; i.puntero= datos+nelementos; return i;}
00177     const_iterador begin() const {return const_iterador(datos);}
00178     const_iterador end() const {return const_iterador(datos+nelementos);}
00179 };
00180 
00181 #include <vector.cpp>
00182 
00183 #endif /* _vector_T_h */

Programación en C++. Desarrollado por Antonio Garrido, © 2001