Скажем, у нас есть два массива:
double *matrix=new double[100];
double *array=new double[10];
И мы хотим скопировать 10 элементов из matrix[80:89] в массив, используя memcpy
.
Любые быстрые решения?
Скажем, у нас есть два массива:
double *matrix=new double[100];
double *array=new double[10];
И мы хотим скопировать 10 элементов из matrix[80:89] в массив, используя memcpy
.
Любые быстрые решения?
Проще использовать std::copy
:
std::copy(matrix + 80, matrix + 90, array);
Это чище, потому что вам нужно указать только диапазон копируемых элементов, а не количество байтов. Кроме того, он работает для всех типов, которые можно копировать, а не только для типов POD.
memcpy(array, &matrix[80], 10*sizeof(double));
Но (поскольку вы говорите С++) вы будете иметь лучшую безопасность типов, используя функцию С++, а не старый C memcpy
:
#include <algorithm>
std::copy(&matrix[80], &matrix[90], array);
Обратите внимание, что функция принимает указатель «один за концом» диапазона, который вы хотите использовать. Большинство функций STL работают таким образом.
matrix + N
вместо &matrix[N]
является то, что для массива размером M
допускается matrix + M
, а &matrix[M]
— нет (поскольку последний разыменовывает указатель на элемент после конца).
- person James McNellis; 11.10.2010
double matrix[100];
иdouble array[10];
? - person James McNellis   schedule 11.10.2010