Использование memcpy для копирования ряда элементов из массива

Скажем, у нас есть два массива:

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

И мы хотим скопировать 10 элементов из матрицы [80:89] в массив с помощью memcpy.

Любые быстрые решения?

Ответ 1

Проще использовать std::copy:

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

Это чище, потому что вам нужно указать только диапазон элементов, которые нужно скопировать, а не количество байтов. Кроме того, он работает для всех типов, которые могут быть скопированы, а не только типов POD.

Ответ 2

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

Но (так как вы говорите С++) у вас будет лучше безопасность типа с использованием функции С++, а не старой C memcpy:

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

Обратите внимание, что функция принимает указатель "один-конец-конец" диапазона, который вы хотите использовать. Большинство функций STL работают таким образом.

Ответ 3

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