Як зазначали інші, в C ви б використали memcpy
. Однак зауважте, що це робить необроблену копію пам'яті, тому, якщо ваші структури даних мають вказівник на себе або одна на одну, вказівники в копії все одно вказуватимуть на оригінальні об'єкти.
У C ++ ви також можете використовувати, memcpy
якщо члени вашого масиву є POD (тобто, по суті, типи, які ви також могли б використовувати в незміненому вигляді на C), але загалом memcpy
це не дозволено. Як згадували інші, функцією, яку потрібно використовувати, є std::copy
.
Сказавши це, в C ++ вам рідко слід використовувати необроблені масиви. Натомість вам слід скористатися одним із стандартних контейнерів ( std::vector
є найближчим до вбудованого масиву, а також, на мою думку, найближчим до масивів Java - справді ближчим, ніж звичайні масиви С ++, але, std::deque
або std::list
в деяких випадках може бути більш доречним) або, якщо ви використовуєте С ++ 11, std::array
який дуже близький до вбудованих масивів, але із семантикою значень, як інші типи С ++. Усі типи, про які я згадав тут, можна скопіювати шляхом призначення або побудови копії. Більше того, ви можете "перехресно копіювати" з 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