2010-10-10 4 views
11

Disons que nous avons deux tableaux:Utiliser memcpy pour copier une série d'éléments d'un tableau

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

Et nous voulons copier 10 éléments de la matrice [80:89] pour tableau en utilisant memcpy.

Des solutions rapides?

+1

compileriez-vous ce code? –

+1

Je pense que ce n'est même pas une déclaration C++ valide d'un tableau. memcpy nécessite un début et une longueur + taille de la variable. Les paramètres doivent être quelque chose comme matrice = src, array = dest, 80 = début, 10 = len, sizeof (double) = taille. $ man memcopy –

+5

Voulez-vous dire 'matrice double [100];' et 'double tableau [10];'? –

Répondre

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

Il est plus simple à utiliser std::copy:

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

C'est plus propre car il vous suffit de préciser la gamme d'éléments à copier, et non le nombre d'octets. En outre, il fonctionne pour tous les types qui peuvent être copiés, pas seulement les types POD.

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

Mais (puisque vous dites que C++), vous aurez une meilleure sécurité de type en utilisant une fonction C++ plutôt que vieux C memcpy:

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

Notez que la fonction prend un pointeur « un passé- la fin "de la gamme que vous voulez utiliser. La plupart des fonctions STL fonctionnent de cette manière.

+5

Un avantage de l'utilisation de 'matrix + N' au lieu de' & matrix [N] 'est que pour un tableau de taille' M', 'matrix + M' est autorisé mais' & matrix [ M] 'ne l'est pas (parce que ce dernier déréférence un pointeur vers l'élément un-passé-la-fin). –

Questions connexes