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

Ferran Ferri ferranferri en gmail.com
Jue Oct 9 16:53:06 CEST 2008


A ver si lo entiendo:

En primer termino, defines el constructor de copia.Hasta ahi de acuerdo.
Pero cuando sugieres esto:

vector<stExample> destiny  = source;

dices que source es un vector. La clase vector sobrecarga el operador = y lo
que hace es una copia, elemento a elemento del contenido del vector source a
destiny, en este caso. Pero el hueco que pretendo llenar es precisamente
cuando pones

//lo llenas como tu quieras

Precisamente es lo que preguntaba en un principio. Para copiar dos punteros
usaria un memcpy y para dos vectores v1 = v2 o incluso el copy, pero me
gustaria saber si hay alguna manera de "disfrazar" o hacer un cast del
puntero para hacer el copy a un vector, y asi moverme en el mundo STL que es
mucho mas amigable.

Muchas gracias por la respuesta.
Si alguien me puede sugerir algo mas...
Ferran


2008/10/9 Rolando Kindelan Nuñez <rkindelan en uci.cu>

>  * *
>
> *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.
>
>
>
> * *
>
> * *
>
> ________________________________
>
> [image: untitled] *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
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20081009/da5feeeb/attachment.html>


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