alguno puntos a considerar

i) hacer un clear() de ord antes de andar agregando para evitar problemas con 
vectores de output que vienen con algo cargado

ii) no entiendo para que el struct: el edad debería ser algo de Persona, si 
redefinís el comparador booleano comparePersonaEdad que reciba personas puede 
comparar con getEdad() o directamente usando el operador < de Persona 
sobrecargado

iii) uso de punteros a PersonaEdad
a) sencillamente no usarlos
con "PersonaEdad pe[p.size()];" ya tenés el vector de forma estática
y simplemente haces un overwrite de datos en el for

 for (size_t i = 0; i < p.size(); ++i) {
        pe[i].persona = p[i];
        pe[i].edad = p[i]->getEdad();
    }

b) también tenés la opción de pasarlo todo a punteros con "PersonaEdad* 
pe[p.size()]"
y ahí si haces lo del for que planteaste vos (salvo que harías un "pe[i] =  x;" 
sin desreferenciar a x) y al finalizar recorrerías pe para hacer delete de pe[i]

c) o sino otra alternativa es hacer un
for (size_t i = 0; i < p.size(); ++i) {
        PersonaEdad * x = new PersonaEdad();
        x->persona = p[i];
        x->edad = p[i]->getEdad();
        pe[i] = * x;
        delete x;
    }
en este se ve claramente el uso innecesario de recursos

saludos



From: Maximiliano Milicich 
Sent: Monday, November 03, 2008 10:38 PM
To: Una lista para consultas de programación 
Subject: [Prog] Pregunta C++


Hola:
No la tengo muy clara con C++, y tengo esta duda:
Tengo el siguiente fragmento de codigo, basicamente un metodo que recibe un 
vector de Personas, y lo ordena por edad, volcandolo en otro vector recibido 
por referencia.
Al margen de que esto podria ser resuelto usando un metodo "sort" de 
<algorithm> que anduve viendo por ahi...
Si yo quisiera resolverlo con el viejo qsort, como lo planteo abajo...
Como libero la memoria de los struct creados ??
Es decir...si tengo un array de structs, pero quiero llenarlo en forma 
dinamica...si o si debo crear los struct con un new...
Pero como inserto el struct creado al array ?
No se si se entiende bien lo q pregunto, lo mejor es ver el codigo...y q 
alguien si se copa me diga como libero la memoria alojada.

Muchas gracias !!
Saludos
MA_Xx

typedef struct {
    Persona * persona;
    int edad;
} PersonaEdad;

void ordenarPersonas(const vector<Persona *> & p, vector<Persona *> & ord) {

    PersonaEdad pe[p.size()];
    
    for (size_t i = 0; i < p.size(); ++i) {
        PersonaEdad * x = new PersonaEdad();
        x->persona = p[i];
        x->edad = p[i]->getEdad();
        pe[i] = * x;
    }

    qsort(pe, p.size(), sizeof(PersonaEdad), comparePersonaEdad);


    for (size_t i = 0; i < p.size(); ++i) {
        ord.push_back(pe[i].persona);
    }

    // DELETE ????

}




--------------------------------------------------------------------------------


_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a