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

Ferran Ferri ferranferri en gmail.com
Jue Oct 9 17:09:00 CEST 2008


Creo que tengo una idea.

stExample* a = foo();       // tienes razon aqui programante. Fallo mio :)
std::vector<stExample> temp = (a, a + sizeof(a) / sizeof(stExample));
//Esto crea un vector cuyo valor inicial es el contenido del vector

y luego ya puedo hacer lo que quiera con el porque estoy en el mundo de STL,
como
examples = temp;

No tengo un compilador a mano pero creo que funcionaria. En cuanto pueda lo
pruebo y os digo algo.


> De todos modos, para lo que quieres hacer, ¿no te vale el operador de
copia de stl::vector?
Pues lo que hace la clase que devuelve el puntero es leer de un archivo.
Primero lo vuelca en memoria y despues va leyendo trozos. El puntero va muy
bien por que puedo copiar bloques de memoria. Si por ejemplo, durante el
parseo, tengo que copiar 100 int, no hago un bucle sino un memcpy.

Pero fuera de esa clase, que hace un buen servicio, no quiero salirme
demasiado de todas las ventajas que me aporta STL, de ahi que quiera
transformar el puntero a un vector.

Muchas gracias por todo.
Ferran


2008/10/9 Programante <programante en gmail.com>

> Ferran Ferri escribió:
> > (...)
>
>> 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();
>>
> Puesto que devuelve un puntero, usarías stExample* a = foo();
>
>  for(...){
>>    examples.push_back(stExample[i++]);
>> }
>>
> Usar push_back es ineficiente. Puesto que sabes el número de elementos
> usarías examples.resize( nº elementos ); y luego copiarías cada elemento.
>
>
>> 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.
>>
> Esa copia la puedes hacer con stl::copy() si foo() devuelve algo iterable
> (por ejemplo, devuelve el vector y no un puntero a sus elementos).
>
> De todos modos, para lo que quieres hacer, ¿no te vale el operador de copia
> de stl::vector?
>
>
>> Muchas gracias
>> Ferran
>>
> De nada.
>
>
>
> _______________________________________________
> 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/ee058cea/attachment.html>


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