Như những người khác đã đề cập, trong C bạn sẽ sử dụng memcpy
. Tuy nhiên, lưu ý rằng điều này thực hiện một bản sao bộ nhớ thô, vì vậy nếu cấu trúc dữ liệu của bạn có con trỏ tới chính chúng hoặc với nhau, các con trỏ trong bản sao sẽ vẫn trỏ đến các đối tượng gốc.
Trong C ++, bạn cũng có thể sử dụng memcpy
nếu các thành viên mảng của bạn là POD (nghĩa là về cơ bản các kiểu mà bạn cũng có thể sử dụng không thay đổi trong C), nhưng nói chung, memcpy
sẽ không được phép. Như những người khác đã đề cập, chức năng sử dụng là std::copy
.
Phải nói rằng, trong C ++, bạn hiếm khi nên sử dụng mảng thô. Thay vào đó, bạn nên sử dụng một trong các vùng chứa tiêu chuẩn ( std::vector
là vùng gần nhất với mảng tích hợp sẵn và tôi cũng nghĩ là gần nhất với mảng Java - thực sự gần hơn so với mảng C ++ thuần túy - nhưng std::deque
hoặc std::list
có thể thích hợp hơn trong một số trường hợp) hoặc, nếu bạn sử dụng C ++ 11, std::array
rất gần với các mảng dựng sẵn, nhưng có ngữ nghĩa giá trị như các loại C ++ khác. Tất cả các loại tôi đề cập ở đây có thể được sao chép bằng cách phân công hoặc sao chép xây dựng. Hơn nữa, bạn có thể "sao chép chéo" từ opne này sang opne khác (và thậm chí từ một mảng dựng sẵn) bằng cách sử dụng cú pháp trình lặp.
Điều này cung cấp một cái nhìn tổng quan về các khả năng (tôi cho rằng tất cả các tiêu đề liên quan đã được bao gồm):
int main()
{
int a[] = { 1, 2, 3, 4 };
int b[4];
memcpy(b, a, 4*sizeof(int));
std::copy(a, a+4, b);
std::copy(std::begin(a), std::end(a), std::begin(b));
std::vector<int> va(a, a+4);
std::vector<int> vb = va;
std::vector<int> vc { 5, 6, 7, 8 };
vb = vc;
vb.assign(vc.begin(), vc.end());
std::vector<int> vd;
std::copy(va.begin(), va.end(), std::back_inserter(vd));
std::copy(a, a+4, vd.begin());
std::array<int, 4> sa = { 9, 10, 11, 12 };
std::array<int, 4> sb = sa;
sb = sa;
}
man memmove
vàman memcpy