เป็นคนอื่นได้กล่าวถึงใน C memcpy
คุณจะใช้ อย่างไรก็ตามโปรดทราบว่านี่เป็นการคัดลอกหน่วยความจำดิบดังนั้นหากโครงสร้างข้อมูลของคุณมีตัวชี้ถึงตัวเองหรือถึงกันตัวชี้ในสำเนาจะยังคงชี้ไปที่วัตถุดั้งเดิม
ใน C ++ คุณยังสามารถใช้memcpy
ถ้าสมาชิกอาร์เรย์ของคุณเป็น POD (นั่นคือโดยพื้นฐานแล้วประเภทที่คุณสามารถใช้ได้โดยไม่เปลี่ยนแปลงใน C) แต่โดยทั่วไปmemcpy
จะไม่ได้รับอนุญาต std::copy
ในฐานะที่เป็นคนพูดถึงฟังก์ชั่นในการใช้งาน
ต้องบอกว่าใน C ++ คุณไม่ค่อยควรใช้อาร์เรย์ดิบ คุณควรใช้คอนเทนเนอร์มาตรฐานแทน ( std::vector
ซึ่งใกล้เคียงที่สุดกับอาร์เรย์ในตัวและฉันคิดว่าใกล้เคียงกับอาร์เรย์ Java มากที่สุด - ใกล้กว่าอาร์เรย์ C ++ ธรรมดาแน่นอน - แต่std::deque
หรือstd::list
อาจเหมาะสมกว่าในบางกรณี) หรือถ้าคุณใช้ C ++ 11 std::array
ซึ่งอยู่ใกล้กับอาร์เรย์ในตัวมาก แต่มีค่าความหมายเหมือนกับ C ++ ประเภทอื่น ๆ ทุกประเภทที่ฉันกล่าวถึงที่นี่สามารถคัดลอกได้โดยการมอบหมายงานหรือคัดลอกโครงสร้าง ยิ่งไปกว่านั้นคุณสามารถ "cross-copy" จาก opne ไปยังอีกอัน (และแม้กระทั่งจากอาร์เรย์ในตัว) โดยใช้ไวยากรณ์ตัววนซ้ำ
สิ่งนี้ทำให้เห็นภาพรวมของความเป็นไปได้ (ฉันถือว่ารวมส่วนหัวที่เกี่ยวข้องทั้งหมดแล้ว):
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
และman memcpy