Guest User

Untitled

a guest
Feb 19th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. #ifndef ARREGLO_H
  2. #define ARREGLO_H
  3.  
  4. template < typename Tipo >
  5. class Arreglo
  6. {
  7. public:
  8. Arreglo();
  9. ~Arreglo();
  10.  
  11. // Permite agregar elementos
  12. void agregarInicio(const Tipo &);
  13. /*void agregarFin(const Tipo &);
  14.  
  15. // Permite eliminar elementos del arreglo
  16. void eliminar_incio();
  17. void eliminar_fin();*/
  18. void eliminar(int);
  19.  
  20. // Devuelve una referencia al elemento del subíndice dado
  21. Tipo & operator [] (int);
  22.  
  23. // Indica si está vacío el arreglo
  24. bool estaVacio();
  25.  
  26. private:
  27. Tipo * arreglo; // Sobre éste se crea el arreglo
  28. unsigned int tamanio; // Tamaño del arreglo
  29. unsigned int rango; // La cantidad de elementos usados en el arrglo
  30. };
  31.  
  32. #endif // ARREGLO_H
  33.  
  34. template < typename Tipo >
  35. Arreglo<Tipo>::Arreglo()
  36. {
  37. arreglo = 0;
  38. tamanio = 0;
  39. rango = 0;
  40. }
  41.  
  42. template < typename Tipo >
  43. Arreglo<Tipo>::~Arreglo()
  44. {
  45. delete [] arreglo;
  46. tamanio = 0;
  47. rango = 0;
  48. }
  49.  
  50. // Añade elementos a por el inicio del arreglo
  51. template < typename Tipo >
  52. void Arreglo<Tipo>::agregarInicio(const Tipo &nElemento)
  53. {
  54. // ¿El arreglo no está vacío?
  55. if( !estaVacio() )
  56. {
  57. // Crea un arreglo temporal donde se guardarán los nuevos datos
  58. Tipo * arregloTemp = new Tipo[tamanio + 1];
  59.  
  60. // Agrega el primer elemento al nuevo arreglo
  61. arregloTemp[0] = nElemento;
  62.  
  63. // Añade el resto de los elementos al arreglo
  64. for(int i = 1; i < tamanio + 1; i++)
  65. {
  66. arregloTemp[i] = arreglo[i - 1];
  67. }
  68.  
  69. // Elimina el arreglo antiguo
  70. delete [] arreglo;
  71.  
  72. // Asigna el nuevo arreglo
  73. arreglo = arregloTemp;
  74.  
  75. // Aumenta el número de elementos
  76. tamanio += 1;
  77. rango += 1;
  78. }
  79. else
  80. {
  81. // Crea un arreglo para un elemento
  82. arreglo = new Tipo[1];
  83.  
  84. // Asigna el elemento dado
  85. arreglo[0] = nElemento;
  86.  
  87. // Incrementa el tamaño del arreglo
  88. tamanio++;
  89.  
  90. // Incrementa el tamaño del rango
  91. rango++;
  92. }
  93. }
  94.  
  95. template < typename Tipo >
  96. // Elimina el elemento del subíndice indicado
  97. void Arreglo<Tipo>::eliminar(int subindice)
  98. {
  99. // ¿El arreglo tiene un elemento?
  100. if( rango == 1 )
  101. {
  102. // Elimina el arreglo
  103. delete arreglo;
  104. arreglo = 0;
  105.  
  106. // El rango es 0
  107. rango = 0;
  108.  
  109. // El tamaño es 0
  110. tamanio = 0;
  111. }
  112. else if( !estaVacio() )
  113. {
  114. // Crea un arreglo temporal donde se guardarán los nuevos datos
  115. Tipo * arregloTemp = new Tipo[tamanio - 1];
  116.  
  117. // Copia los elementos restantes del arreglo
  118. for( int i = 0; i < tamanio - 1; i++)
  119. {
  120. // ¿Es el subindice indicado?
  121. if( i != subindice )
  122. {
  123. // Asigna la cantidad
  124. arregloTemp[i] = arreglo[i];
  125. }
  126. }
  127.  
  128. // Elimina el arreglo
  129. delete arreglo;
  130.  
  131. // Asigna el arreglo
  132. arreglo = arregloTemp;
  133. }
  134. }
  135.  
  136. template < typename Tipo >
  137. Tipo& Arreglo<Tipo>::operator[] (int subindice )
  138. {
  139. if( subindice < rango )
  140. {
  141. return arreglo[subindice];
  142. }
  143. }
  144.  
  145. template < typename Tipo >
  146. // Indica si está vacío el arreglo
  147. bool Arreglo<Tipo>::estaVacio()
  148. {
  149. return arreglo == 0;
  150. }
Add Comment
Please, Sign In to add comment