2012-10-12 127 views
14

Duplicar posible:
How to convert vector to array C++¿La forma más rápida de copiar el contenido de un vector en una matriz?

Cuando se trabaja con matrices que tienen la capacidad de utilizar

memcpy(void *destination, const void *source, size_t num); 

Sin embargo vectores proporcionan simplemente iteradores para un método de copia, lo que hace memcpy inútil . ¿Cuál es el método más rápido para copiar el contenido de un vector a otra ubicación?

+11

En C++, ** siempre ** use 'std :: copy' en lugar de' memcpy' (el primero delegará en este último cuando po sible). – ildjarn

+1

No sé qué tan rápido es, pero podrías usar 'std :: copy'. –

+1

Creo que la respuesta más obvia aquí sería: _¿Por qué (cree) necesita copiar del vector en una matriz? _ Un vector _es_ una matriz, y puede usarse como tal. Como efecto colateral, _no se produce ninguna copia_ sin duda es la operación de copia más rápida posible. – sbi

Respuesta

31

std::copy, incuestionablemente. Está muy optimizado para usar internamente el mejor método disponible. Por lo tanto, está completamente a la par con memcpy. No hay motivo para usar memcpy, incluso al copiar entre arreglos de estilo C o búfers de memoria.

3

Puede utilizar memcpy con un vector - vectores están garantizados para ser contiguos en la memoria para siempre que el vector no está vacía, puede utilizar &vData[0] (donde vData es su vector) como el puntero de origen a memcpy

EDITAR Como se menciona en los comentarios a otras respuestas, esto solo funciona si el tipo de valor del vector es trivialmente copiable.

+2

-1 por la misma razón mencionada por ildjarn bajo la respuesta de nosi. –

+1

@lidjarn De acuerdo, no lo sabía y estoy seguro de que debe haber otros que no, así que no borraré esta respuesta. – mathematician1975

11

Tendrá que medir eso para usted, en su entorno, con su programa. Cualquier otra respuesta tendrá demasiadas advertencias.

Mientras lo hace, aquí es método de un se puede comparar con:

std::copy(source.begin(), source.end(), destination); 
5

Prueba esto: -

std::vector<int> newvector(oldvector); 

Para la reproducción de una matriz intente lo siguiente: -

std::copy(source.begin(), source.end(), destination); 
+2

-1. Asker quiere una matriz, no un nuevo vector. –

+0

Lo siento, lo leí mal, entonces esto sería genial como respondió Rob: - std :: copy (source.begin(), source.end(), destination); –

+0

Acabo de corregirlo. ¡Gracias por contar! :) –

Cuestiones relacionadas