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