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

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

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

И мы хотим скопировать 10 элементов из matrix[80:89] в массив, используя memcpy.

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


person Eminemya    schedule 10.10.2010    source источник
comment
будет ли этот код компилироваться?   -  person Aaron Anodide    schedule 11.10.2010
comment
Я думаю, что это даже не допустимое объявление массива С++. Для memcpy требуется начало и длина + размер переменной. Параметры должны быть примерно такими: matrix = src, array = dest, 80 = start, 10 = len, sizeof(double) = size. $ man memcopy   -  person Ronny Brendel    schedule 11.10.2010
comment
Возможно, вы имеете в виду double matrix[100]; и double array[10];?   -  person James McNellis    schedule 11.10.2010
comment
да... этот код не выглядит правильно ни на одном языке..   -  person mpen    schedule 11.10.2010
comment
@оригинальный постер: если вы исправите пример кода, я верну баллы обратно - ответы достаточно полезны; хотя вопрос вводит в заблуждение (неправильный код)   -  person Aaron Anodide    schedule 11.10.2010


Ответы (2)


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

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

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

person James McNellis    schedule 10.10.2010

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

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

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

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

person aschepler    schedule 10.10.2010
comment
Одним из преимуществ использования matrix + N вместо &matrix[N] является то, что для массива размером M допускается matrix + M, а &matrix[M] — нет (поскольку последний разыменовывает указатель на элемент после конца). - person James McNellis; 11.10.2010