[C con Clase] Copiar de puntero a std::vector

Rolando Kindelan Nuñez rkindelan en uci.cu
Jue Oct 9 14:58:21 CEST 2008


 

Bueno yo no creo que sea necesario una función de <algoritm> para eso, creo que básicamente lo puedes hacer con el operador= que esta sobrecargado en la clase vector.h, el único problema es que en la estructura stExample tienes un puntero y eso evita que la copia se realice automáticamente por el compilador, problema que puedes revertir sobrecargando el operador = de tu estructura que seria algo como esto:

 

typedef struct stExample{
    int a; 
    int *b;

    const stExample& operator=(const stExample& ste)

    {

        a = ste.a;

       b = ste.b;  // OJO

/*debes ver como se debe copiar el puntero b, porque el compilador no puede hacerlo por sí mismo o de hecho lo hace, pero copia la dirección de memoria y eso posibilita que al modificar uno el otro se modifique, no es una copia de los datos que es lo que necesitas.*/        

     }
};

 

Luego de esto todo sale natural, declaras tu vector

vector<stExample> source;

 

//lo llenas como tu quieras

 

y para copiarlo solo necesitas:

 

vector<stExample> destiny  = source;

 

saludos.

 

 

 

________________________________

  rolo.

 

La risa es la distancia más corta entre dos personas. (Victor Borge)

 

From: cconclase-bounces en listas.conclase.net [mailto:cconclase-bounces en listas.conclase.net] On Behalf Of Ferran Ferri
Sent: Thursday, October 09, 2008 7:15 AM
To: Lista de correo sobre C y C++
Subject: [C con Clase] Copiar de puntero a std::vector

 

hola,

si tengo un tipo definido cualquiera, como por ejemplo:

typedef struct stExample{
    int a; 
    int *b;
};

Ahora digamos que dentro de mi clase tengo un vector de ese tipo:

vector<stExample> examples;

y que tengo una funcion que me devuelve un puntero a un array de ese mismo tipo:

stExample* foo();

Para copiar el puntero a vector, se que puedo ir extrayendo uno por uno los elementos de stExample con un bucle y copiarlos

stExample a = foo();
for(...){
    examples.push_back(stExample[i++]);
}

Mi pregunta es si seria posible usar la funcion copy de <algorithm> para copiarlo de una vez en dentro del vector. Lo digo por que el codigo se veria mucho mejor y ademas no tengo que checkear tantos errores yo mismo teniendo la magnifica libreria STL.

Muchas gracias
Ferran

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20081009/cc88cdc5/attachment.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 630 bytes
Desc: image001.png
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20081009/cc88cdc5/attachment.png>


Más información sobre la lista de distribución Cconclase