Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   clonar o duplicar Lista C++ (https://www.clubdelphi.com/foros/showthread.php?t=70102)

BC++ 30-09-2010 00:05:31

clonar o duplicar Lista C++
 
Hola Amigos del foro.

tengo un problemita... (ó quizas un problema grande):confused:

tengo una listaPersonas y esta asociada a una listaAsociaciones, la primer lista hace referencia a la segunda, donde me dice con quien esta asociada esta ListaPersonas[item]. Cada vez q se inicializa listapersona obtiene un numero aleatoria unico, para cada item's.

Entonces, ahora lo que quiero hacer es hacer una copia o un clon de estas listas y llamarla listaPersonas2 y listaAsociaciones 2 y usarla para ensayos y despues compararlas. ¿es posible hacer esto,de manera que reasigne los punteros de referencia y no me de error?

opcion que se me ocurrio:
(1)pasar la informacion a txt y a partir de ello rearmar las listas , pero existe el problema que toma mucho tiempo si son mas de 1000 elementos.
(2) preguntar, quizas existe una funcion que lo haga solo.

Muchas gracias, por su colaboración.

pd: si no se entedio , lo vuelvo a redactar. Gracias

escafandra 30-09-2010 00:27:54

Y esas listas ¿que son?. Arrays de punteros char**, objetos TList...

Saludos.

BC++ 30-09-2010 00:57:30

hola escafandra, gracias por ayudarme

si tenes razon no di muchas especificaciones,

son Tlist de objetos.

gracias

escafandra 30-09-2010 20:13:36

TList es una clase que simplemente guarda una lista de punteros. Si copias los punteros, no duplicas la lista, pues apuntan al mismo sitio y si destruyeras el original, la copia se corrompe (sus puntero no apuntan a nada válido).

Debes realizar una copya de cada objeto apuntado.

Te muestro un ejemplo con cadenas:

Código:

  TList *List1 = new TList;
  TList *List2 = new TList;
  List1->Add("uno");
  List1->Add("dos");

  // Añado una copia de cada elemento de List1
  for(int i=0; i<List1->Count; i++)
    List2->Add(StrNew((char*)List1->Items[i]));

Saludos.

BC++ 01-10-2010 19:18:15

Hola Escafandra, muchas gracias, por responder
Te cuento la idea es literalmente copiar la lista, y no hacer una copia de la lista de los punteros.

"Seria como ejecutar 2 veces el mismo ejecutable, pero que los ejecutables tengan las mismos valores de las variables y que los punteros sean distintos, de manera de poder usar la lista copia para hacer ensayos ó pruebas (independientes)"

No se si esto es posible, por eso proponia de los txt, de manera que me devuela la posicion de cada item de la lista y me diga hacia donde apunta de la segunda lista (La cosa es q me consume demasiado tiempo bajar a disco y subir).

Muchas gracias, BC++

rgstuamigo 01-10-2010 22:19:35

Lo que te ha recomendado escafandra es lo más adecuado hacer, es decir copiar cada elemento de la lista a tu nueva lista destino.;)
Cabe mencionar que la Clase TList cuenta con un método que te hace todo:
Código Delphi [-]
TList *List1 = new TList;
  TList *List2 = new TList;
  List1->Add("uno");
  List1->Add("dos");

    List2->Assign(List1,laCopy,NULL);//copio todo el contenido de la lista 1 a la lista 2
   ShowMessage((char*)List2->Items[0]);//Aqui muestro el primer elemento copiado
Saludos...:)

escafandra 02-10-2010 01:34:15

La pega está en que el método TList::Assign no es incorporado al Builder hasta la versión 6. Los que usen la 5 no lo podrán usar, teniendo que realizar la copia manual (que es bien sencilla)

;):)

Saludos.

BC++ 06-10-2010 23:02:32

Muchas gracias!, lo pruebo y les aviso :D

Saludos,BC++


La franja horaria es GMT +2. Ahora son las 22:32:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi