Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-09-2010
BC++ BC++ is offline
Miembro
 
Registrado: ene 2008
Posts: 44
Poder: 0
BC++ Va por buen camino
clonar o duplicar Lista C++

Hola Amigos del foro.

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

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
Responder Con Cita
  #2  
Antiguo 30-09-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Y esas listas ¿que son?. Arrays de punteros char**, objetos TList...

Saludos.
Responder Con Cita
  #3  
Antiguo 30-09-2010
BC++ BC++ is offline
Miembro
 
Registrado: ene 2008
Posts: 44
Poder: 0
BC++ Va por buen camino
hola escafandra, gracias por ayudarme

si tenes razon no di muchas especificaciones,

son Tlist de objetos.

gracias
Responder Con Cita
  #4  
Antiguo 30-09-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #5  
Antiguo 01-10-2010
BC++ BC++ is offline
Miembro
 
Registrado: ene 2008
Posts: 44
Poder: 0
BC++ Va por buen camino
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++
Responder Con Cita
  #6  
Antiguo 01-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

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...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #7  
Antiguo 02-10-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #8  
Antiguo 06-10-2010
BC++ BC++ is offline
Miembro
 
Registrado: ene 2008
Posts: 44
Poder: 0
BC++ Va por buen camino
Muchas gracias!, lo pruebo y les aviso

Saludos,BC++
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
clonar forms titomigue Varios 5 03-06-2010 15:40:50
Clonar TADOQuery david.rguez Conexión con bases de datos 2 19-09-2007 16:26:44
Clonar Objeto senda OOP 1 13-08-2007 18:24:35
Duplicar / Clonar tabla con ADO Marcb3 Conexión con bases de datos 2 30-01-2007 13:15:37
Como Clonar un ibDataset???? AGAG4 Firebird e Interbase 4 28-10-2004 17:21:36


La franja horaria es GMT +2. Ahora son las 19:58:09.


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