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

Responder a