2010-10-10 12 views
11

że mamy dwóch tablic:Stosując memcpy skopiować szereg elementów z tablicy

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

I do skopiowania z 10 elementów macierzy [80:89] do tablicy z memcpy.

Jakieś szybkie rozwiązanie?

+1

czy ten kod się skompiluje? –

+1

Myślę, że to nie jest nawet poprawna deklaracja C++ tablicy. memcpy wymaga początku i długości + rozmiaru zmiennej. Parametry muszą być takie, jak matrix = src, array = dest, 80 = start, 10 = len, sizeof (double) = size. $ man memcopy –

+5

Czy masz na myśli 'podwójną macierz [100];' i 'podwójną tablicę [10];'? –

Odpowiedz

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

To prostsze w użyciu std::copy:

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

To jest czystsze, ponieważ trzeba tylko określić zakres elementów do skopiowania, a nie liczba bajtów. Ponadto działa dla wszystkich typów, które można kopiować, a nie tylko dla typów POD.

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

Ale (skoro mówisz, C++) będziesz miał lepsze bezpieczeństwo typu przy użyciu C++ function zamiast starego C memcpy:

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

pamiętać, że funkcja pobiera wskaźnik „jedna past- the-end "zakresu, którego chcesz użyć. Większość funkcji STL działa w ten sposób.

+5

Jedną z zalet używania 'matrix + N' zamiast' & matrix [N] 'jest to, że dla tablicy o rozmiarze' M', 'matrix + M' jest dozwolone, ale' & matrix [ M] 'nie jest (ponieważ ten drugi odrzuca wskaźnik do elementu jeden-koniec-koniec). –