Comme d'autres l'ont mentionné, en C, vous utiliseriez memcpy
. Notez cependant que cela fait une copie de mémoire brute, donc si vos structures de données ont un pointeur vers elles-mêmes ou les unes vers les autres, les pointeurs de la copie pointeront toujours vers les objets d'origine.
En C ++, vous pouvez également utiliser memcpy
si les membres de votre tableau sont des POD (c'est-à-dire essentiellement des types que vous auriez pu également utiliser inchangés en C), mais en général, nememcpy
seront pas autorisés. Comme d'autres l'ont mentionné, la fonction à utiliser est std::copy
.
Cela dit, en C ++, vous devez rarement utiliser des tableaux bruts. Au lieu de cela, vous devez soit utiliser l'un des conteneurs standard ( std::vector
est le plus proche d'un tableau intégré, et je pense aussi que le plus proche des tableaux Java - plus proche que les tableaux C ++ simples, en effet -, mais std::deque
ou std::list
peut être plus approprié dans certains cas) ou, si vous utilisez C ++ 11, std::array
qui est très proche des tableaux intégrés, mais avec une sémantique de valeur comme les autres types C ++. Tous les types que j'ai mentionnés ici peuvent être copiés par cession ou par construction de copie. De plus, vous pouvez "faire une copie croisée" d'un opne à un autre (et même d'un tableau intégré) en utilisant la syntaxe d'itérateur.
Cela donne un aperçu des possibilités (je suppose que tous les en-têtes pertinents ont été inclus):
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
etman memcpy