web-dev-qa-db-ja.com

memcpyを使用して配列から要素の範囲をコピーする

2つの配列があるとします。

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

そして、memcpyを使用して、matrix [80:89]から配列に10個の要素をコピーします。

迅速な解決策はありますか?

12
Eminemya

std::copyを使用する方が簡単です:

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

バイト数ではなく、コピーする要素の範囲を指定するだけでよいため、これはよりクリーンです。さらに、PODタイプだけでなく、コピーできるすべてのタイプで機能します。

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

ただし、(C++と言っているので)古いC memcpyよりもC++関数を使用すると型の安全性が向上します。

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

この関数は、使用する範囲の「最後から1つ」のポインターを受け取ることに注意してください。ほとんどのSTL関数はこのように機能します。

15
aschepler
memcpy(array, matrix+80, sizeof(double) * 10);
10
Daryl Hanson