[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