Como han mencionado otros, en C usaría memcpy
. Sin embargo, tenga en cuenta que esto hace una copia de memoria sin formato, por lo que si sus estructuras de datos tienen un puntero a sí mismas o entre sí, los punteros en la copia seguirán apuntando a los objetos originales.
En C ++ también se puede utilizar memcpy
si los miembros de la matriz son POD (es decir, tipos esencialmente que también se podría haber utilizado sin cambios en C), pero, en general, memcpy
será no ser permitido. Como han mencionado otros, la función a utilizar esstd::copy
.
Habiendo dicho eso, en C ++ rara vez debería usar matrices sin procesar. En su lugar, debe usar uno de los contenedores estándar ( std::vector
es el más cercano a una matriz incorporada, y también creo que es el más cercano a las matrices de Java, más cerca que las matrices de C ++ simples, de hecho, pero std::deque
o std::list
puede ser más apropiado en algunos casos) o, si usa C ++ 11,std::array
que está muy cerca de las matrices integradas, pero con semántica de valor como otros tipos de C ++. Todos los tipos que mencioné aquí se pueden copiar por asignación o construcción de copia. Además, puede realizar una "copia cruzada" de opne a otro (e incluso de una matriz incorporada) utilizando la sintaxis de iterador.
Esto brinda una descripción general de las posibilidades (supongo que se han incluido todos los encabezados relevantes):
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
yman memcpy