2010-10-10 27 views
11

Giả sử chúng ta có hai mảng:Sử dụng memcpy để sao chép một loạt các yếu tố từ một mảng

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

Và chúng tôi muốn sao chép 10 yếu tố từ ma trận [80:89] để mảng sử dụng memcpy.

Bất kỳ giải pháp nhanh nào?

+1

mã đó có được biên dịch không? –

+1

Tôi nghĩ rằng đó không phải là một khai báo C++ hợp lệ của một mảng. memcpy yêu cầu bắt đầu và chiều dài + kích thước của biến. Các tham số phải là một cái gì đó giống như ma trận = src, mảng = dest, 80 = bắt đầu, 10 = len, sizeof (đôi) = kích thước. $ man memcopy –

+5

Bạn có lẽ có nghĩa là 'ma trận kép [100];' và 'mảng kép [10];'? –

Trả lời

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

Đó là đơn giản để sử dụng std::copy:

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

Đây là sạch hơn vì bạn chỉ cần xác định phạm vi của các yếu tố để được sao chép, không phải là số byte. Ngoài ra, nó hoạt động cho tất cả các loại có thể được sao chép, không chỉ các loại POD.

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

Nhưng (kể từ khi bạn nói C++), bạn sẽ có loại an toàn tốt hơn sử dụng một hàm C++ chứ không phải là cũ C memcpy:

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

Lưu ý rằng chức năng phải mất một con trỏ "một past- cuối cùng "của phạm vi bạn muốn sử dụng. Hầu hết các chức năng STL đều hoạt động theo cách này.

+5

Một lợi thế của việc sử dụng 'ma trận + N' thay vì' & ma trận [N] 'là cho một mảng có kích thước' M', 'ma trận + M' được cho phép nhưng' & ma trận [ M] 'không phải là (bởi vì sau này dereferences một con trỏ đến phần tử một-qua-the-end). –

Các vấn đề liên quan