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
00063 Vector<T>(int n=0);
00064 Vector<T>(const Vector<T>& original);
00065
00066 ~Vector<T>();
00067
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
00099 class const_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
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