Como outros mencionaram, em C você usaria memcpy
. Observe, entretanto, que isso faz uma cópia de memória bruta, portanto, se suas estruturas de dados tiverem um ponteiro para si mesmas ou entre si, os ponteiros na cópia ainda apontarão para os objetos originais.
Em C ++ você também pode usar memcpy
se os seus membros da matriz estão POD (isto é, essencialmente tipos que você também poderia ter usado inalterada em C), mas, em geral, memcpy
vai não ser permitido. Como outros mencionaram, a função a ser usada é std::copy
.
Dito isso, em C ++ você raramente deve usar matrizes brutas. Em vez disso, você deve usar um dos contêineres padrão ( std::vector
é o mais próximo de um array integrado, e também acho que o mais próximo de arrays Java - mais próximo do que arrays C ++ simples, na verdade -, mas std::deque
oustd::list
pode ser mais apropriado em alguns casos) ou, se você usar C ++ 11, std::array
que é muito próximo aos arrays integrados, mas com semântica de valor como outros tipos de C ++. Todos os tipos que mencionei aqui podem ser copiados por atribuição ou construção de cópia. Além disso, você pode fazer uma "cópia cruzada" de opne para outro (e até mesmo de um array integrado) usando a sintaxe do iterador.
Isso dá uma visão geral das possibilidades (presumo que todos os cabeçalhos relevantes foram incluídos):
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
eman memcpy