2010-10-10 4 views
11

Supponiamo di avere due array:Utilizzo memcpy per copiare un intervallo di elementi da un array

double *matrix=new double[100]; 
double *array=new double[10]; 

E vogliamo copiare 10 elementi da matrici [80:89] per array utilizzando memcpy.

Qualche soluzione rapida?

+1

questo codice verrà compilato? –

+1

Penso che non sia nemmeno una dichiarazione C++ valida di un array. la memcpy richiede un inizio e una lunghezza + dimensione della variabile. I parametri devono essere qualcosa come matrix = src, array = dest, 80 = start, 10 = len, sizeof (double) = size. $ man memcopy –

+5

Forse intendete 'double matrix [100];' e 'double array [10];'? –

risposta

10
memcpy(array, matrix+80, sizeof(double) * 10); 
21

E 'semplice da usare std::copy:

std::copy(matrix + 80, matrix + 90, array); 

Questo è più pulita, perché hai solo per specificare l'intervallo di elementi da copiare, non il numero di byte. Inoltre, funziona per tutti i tipi che possono essere copiati, non solo per i tipi di POD.

15
memcpy(array, &matrix[80], 10*sizeof(double)); 

Ma (dal momento che dire C++) avrete una migliore sicurezza di tipo utilizzando una funzione di C++ invece di vecchia C memcpy:

#include <algorithm> 
std::copy(&matrix[80], &matrix[90], array); 

Si noti che la funzione richiede un puntatore "one-passato- alla fine "dell'intervallo che desideri utilizzare. La maggior parte delle funzioni STL funziona in questo modo.

+5

Un vantaggio dell'uso di 'matrix + N' invece di' & matrix [N] 'è che per un array di dimensioni' M', 'matrix + M' è permesso ma' & matrix [ M] 'non lo è (poiché quest'ultimo denota un puntatore all'elemento one-past-the-end). –

Problemi correlati