Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/10/2014, 17:20
Avatar de Andrek
Andrek
 
Fecha de Ingreso: enero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Como eliminar una clase de una array dinamica

Gracias por contestar!

Empece desde 0 asi que cambie los nombres de clases y funciones. Ya me funciono agregandole al constructor:

Código:
Vector_Digit() { array = new Digit*[5]; array_size = 5; size = 0; }
Y probe a agregar mas elementos de lo asignado y me dio problemas como dijiste, trate de agrandar el array pero no pude :S aqui te dejo lo que intente hacer:

Código:
//* Problema al crear la nueva array.
           if (size + 1 > array_size)
           {
                    int new_array_size = (array_size / 5) * 5 + 5; // El tamaño va a ir aumentando 5 en 5.
                    Digit** new_array = new Digit*[size]; // Array momentaneo.
                    
                    // Copiar los elementos del viejo array al array momentaneo.
                    for(int i = 0; i < size; i++)
                    {
                            new_array[i] = array[i];
                    }
                    
                    delete[] array; // Eliminar el antiguo array.
                    Digit** array = new Digit*[new_array_size]; // Recrear el viejo array con nuevo tamaño.
                    
                    // Copiar los elementos del array momentaneo al array recreado.
                    for(int i = 0; i < size; i++)
                    {
                            array[i] = new_array[i];
                    }
                    
                    delete[] new_array; // Eliminar array momentaneo.
                    array_size = new_array_size;
           }
           //*/
y te dejo todo el nuevo codigo:

Código:
#include <iostream>

using namespace std;

class Digit
{
      int number;
      public:
      void set(int new_number)
      {
           number = new_number;
      }
      int get()
      {
          return number;
      }
};

class Vector_Digit
{
      Digit** array;
      int array_size;
      int size;
      public:
      Vector_Digit() { array = new Digit*[5]; array_size = 5; size = 0; }
      int Size() { return size; }
      void push_back(Digit *digit)
      {
           //* Problema al crear la nueva array.
           if (size + 1 > array_size)
           {
                    int new_array_size = (array_size / 5) * 5 + 5; // El tamaño va a ir aumentando 5 en 5.
                    Digit** new_array = new Digit*[size]; // Array momentaneo.
                    
                    // Copiar los elementos del viejo array al array momentaneo.
                    for(int i = 0; i < size; i++)
                    {
                            new_array[i] = array[i];
                    }
                    
                    delete[] array; // Eliminar el antiguo array.
                    Digit** array = new Digit*[new_array_size]; // Recrear el viejo array con nuevo tamaño.
                    
                    // Copiar los elementos del array momentaneo al array recreado.
                    for(int i = 0; i < size; i++)
                    {
                            array[i] = new_array[i];
                    }
                    
                    delete[] new_array; // Eliminar array momentaneo.
                    array_size = new_array_size;
           }
           //*/
           array[size] = digit;
           size++;
      }
      void eliminate(int index)
      {
           if (index > -1 && index < size)
           {
                for(int i = index; i < size; i++)
                {
                        if (i + 1 <  size) { array[i] = array[i + 1]; }
                }
                size--;
           }
      }
      Digit* get(int index)
      {
             return array[index];
      }
      void free() { delete[] array; }
};

void ver(Vector_Digit *vector)
{
     for(int i = 0; i < vector->Size(); i++)
     {
             cout << i << ": " << vector->get(i)->get() << endl;
     }
}

void asignar(Vector_Digit *vector)
{
     for(int i = 0; i < vector->Size(); i++)
     {
             vector->get(i)->set(i * 5);
     }
}

int main(int argc, char *argv[])
{
    Vector_Digit vector;
    Digit digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8, digit9, digit10;
    
    vector.push_back(&digit1);
    vector.push_back(&digit2);
    vector.push_back(&digit3);
    vector.push_back(&digit4);
    vector.push_back(&digit5);
    //* Problemas al agregar.
    vector.push_back(&digit6);
    vector.push_back(&digit7);
    vector.push_back(&digit8);
    vector.push_back(&digit9);
    vector.push_back(&digit10);
    //*/
    
    asignar(&vector);
    ver(&vector);
    vector.eliminate(3);
    ver(&vector);
    
    system("PAUSE");
    vector.free();
    return EXIT_SUCCESS;
}
Gracias por la atencion!