Wie andere bereits erwähnt haben, würden Sie in C verwenden memcpy. Beachten Sie jedoch, dass dies eine Rohspeicherkopie ausführt. Wenn Ihre Datenstrukturen also einen Zeiger auf sich selbst oder aufeinander haben, zeigen die Zeiger in der Kopie weiterhin auf die Originalobjekte.
In C ++ können Sie auch , memcpywenn Sie Ihre Array Mitglieder POD sind (die im wesentlichen Typen sind , die Sie auch unverändert in C verwendet haben könnten), aber im Allgemeinen memcpywird nicht erlaubt sein. Wie bereits erwähnt, ist die zu verwendende Funktion std::copy.
Allerdings sollten Sie in C ++ selten Raw-Arrays verwenden. Stattdessen sollten Sie entweder eine der Standardcontainer verwenden ( std::vectorist in der Nähe von einer eingebauten in Reihe, und auch ich denke , die am nächsten Java - Arrays - näher als einfachen C ++ Arrays, in der Tat - aber std::dequeoder std::listbesser geeignet in einigen Fällen) oder, wenn Sie C ++ 11 verwenden, std::arraydas den integrierten Arrays sehr nahe kommt, aber wie andere C ++ - Typen eine Wertsemantik aufweist. Alle hier genannten Typen können durch Zuordnung oder Kopierkonstruktion kopiert werden. Darüber hinaus können Sie mithilfe der Iteratorsyntax von opne zu einem anderen (und sogar von einem integrierten Array) "crosskopieren".
Dies gibt einen Überblick über die Möglichkeiten (ich gehe davon aus, dass alle relevanten Header enthalten sind):
int main()
{
// This works in C and C++
int a[] = { 1, 2, 3, 4 };
int b[4];
memcpy(b, a, 4*sizeof(int)); // int is a POD
// This is the preferred method to copy raw arrays in C++ and works with all types that can be copied:
std::copy(a, a+4, b);
// In C++11, you can also use this:
std::copy(std::begin(a), std::end(a), std::begin(b));
// use of vectors
std::vector<int> va(a, a+4); // copies the content of a into the vector
std::vector<int> vb = va; // vb is a copy of va
// this initialization is only valid in C++11:
std::vector<int> vc { 5, 6, 7, 8 }; // note: no equal sign!
// assign vc to vb (valid in all standardized versions of C++)
vb = vc;
//alternative assignment, works also if both container types are different
vb.assign(vc.begin(), vc.end());
std::vector<int> vd; // an *empty* vector
// you also can use std::copy with vectors
// Since vd is empty, we need a `back_inserter`, to create new elements:
std::copy(va.begin(), va.end(), std::back_inserter(vd));
// copy from array a to vector vd:
// now vd already contains four elements, so this new copy doesn't need to
// create elements, we just overwrite the existing ones.
std::copy(a, a+4, vd.begin());
// C++11 only: Define a `std::array`:
std::array<int, 4> sa = { 9, 10, 11, 12 };
// create a copy:
std::array<int, 4> sb = sa;
// assign the array:
sb = sa;
}
man memmoveundman memcpy