Gracias !!
Esto es lo que estaba queriendo hacer:
iii) uso de punteros a PersonaEdad
a) sencillamente no usarlos
for (size_t i = 0; i < p.size(); ++i) {
pe[i].persona = p[i];
pe[i].edad = p[i]->getEdad();
}
Pasa que con tanto puntero y memoria dinamica, me habia hecho lio, y me
complique las cosas sin querer ("se me enriedo el celebro" jaja)
Sorry por la pregunta q no se entendio nada.
Y gracias de nuevo, Dario y John
MA_Xx
2008/11/3 Juan Alejandro Knight <[EMAIL PROTECTED]>
> 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 <[EMAIL PROTECTED]>
> *Sent:* Monday, November 03, 2008 10:38 PM
> *To:* Una lista para consultas de programación<[email protected]>
> *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
>
>
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion