ż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?
ż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?
memcpy(array, matrix+80, sizeof(double) * 10);
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.
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.
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). –
czy ten kod się skompiluje? –
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 –
Czy masz na myśli 'podwójną macierz [100];' i 'podwójną tablicę [10];'? –