Cómo copiar una matriz en C ++

Cómo copiar una matriz en C ++
En C ++, una matriz se puede copiar manualmente (a mano) o utilizando la función std :: copy (), desde la biblioteca de algoritmo C ++. En la programación de computadoras, hay copia superficial y hay una copia profunda. La copia superficial es cuando dos nombres de matriz diferentes (antiguos y nuevos), consulte el mismo contenido. La copia profunda es cuando los dos nombres de matriz diferentes se refieren a dos contenido independiente pero mismo, en la memoria. Este artículo trata de una copia profunda.

Considere la siguiente matriz:

char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';

Esta es una variedad de diez caracteres de las letras, 'f' a 'o'. El nombre de esta matriz es ARR1. Considere la siguiente matriz:

char arr2 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';

El nombre de esta matriz es ARR2. Observe que ambos contenidos son los mismos. ARR2 sería una copia profunda de ARR1 si ambas listas iniciales se encuentran en diferentes regiones en la memoria de la computadora. Este artículo explica, una copia profunda manual de la matriz y copia profunda automática de la matriz, en C++.

Contenido del artículo

- Copia profunda manual de la matriz

- Copia profunda automática de la matriz

- Conclusión

Copia profunda manual de la matriz

Con este enfoque, se crean dos matrices del mismo tamaño. El primero tiene contenido, mientras que el segundo no tiene contenido. El contenido del primero se copia en el segundo usando el for-loop. El siguiente programa ilustra esto:

#incluir
usando el espacio de nombres STD;
int main ()

#Define el tamaño 10
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char arr2 [tamaño];
para (int i = 0; iarr2 [i] = arr1 [i];
regresar 0;

La primera línea del programa incluye el encabezado C ++ iOStream (biblioteca) para entrada y salida. Esta primera línea es una directiva. La segunda línea no es una directiva. Es una declaración. Insiste en que cualquier nombre no precedido por std :: es del espacio de nombres estándar. A partir de entonces es la función principal de C ++.

La primera línea en la función Main () es una directiva. Define el tamaño de ambas matrices, para ser 10. No termina con un punto y coma. Termina con la tecla de entrada del teclado '\ n' . Esta línea podría haber sido igualmente "int tamaño = 10;". La línea posterior es una declaración que define la primera matriz. La línea siguiente es la declaración de la segunda matriz, sin inicialización práctica, pero con el mismo tamaño.

El siguiente segmento de código en la función principal hace la copia, elemento por elemento, de la primera a la segunda matriz.

Se pueden agregar los siguientes dos segmentos de código, para imprimir ambos contenidos de matriz en la terminal (consola):

para (int i = 0; icout << arr1[i] << ";
cout << endl;
para (int i = 0; icout << arr2[i] << ";
cout << endl;

La salida debe ser,

F g h i j k l m n o
F g h i j k l m n o

Copia profunda automática de la matriz

Aquí, la función std :: copy (), de la biblioteca de algoritmo C ++ se usa. Esto significa que el encabezado de algoritmo (biblioteca) debe incluirse en el programa. No hay necesidad de copiar, Elemento por elemento, aquí. El prototipo de la función std :: copy () es:

plantilla
Constexpr OutterIterator Copy (InputIterator First, Inputiterator Last,
Resultado de salida);

El primer argumento es un iterador que apunta al primer elemento del contenedor de origen (lista). El segundo argumento es un iterador que apunta justo más allá del último elemento del contenedor de origen. El tercer argumento es un iterador que apunta al primer elemento del contenedor de destino vacío, que ya debería haber sido declarado.

Esta sintaxis se puede interpretar para matrices con el siguiente prototipo:

plantilla
Constexpr outputIderator Copy (arr1, puntero a just-pasta-cor1, arr2);

Pointer-to-just-PAST-Arr1 es lo mismo que el tamaño de arr1 +. Entonces, el siguiente programa realiza una copia profunda automática de una matriz a otra:

#incluir
#incluir
int main ()

Tamaño int = 10;
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char arr2 [tamaño];
copia (arr1, arr1+tamaño, arr2); // copia automática
regresar 0;

Tenga en cuenta la inclusión de la biblioteca de algoritmo. "Tamaño int = 10;" se ha utilizado, en lugar de "char arr2 [tamaño];". Tenga en cuenta que las matrices aún tenían que ser del mismo tamaño, pero con el segundo vacío. La declaración de copia automática es:

copia (arr1, arr1+tamaño, arr2);

La función no tenía que ser precedida por "std ::", ya que está "usando el espacio de nombres std"; En la parte superior del programa.

Se pueden agregar los siguientes dos segmentos de código para imprimir ambos contenidos de matriz en la terminal (consola):

para (int i = 0; icout << arr1[i] << ";
cout << endl;
para (int i = 0; icout << arr2[i] << ";
cout << endl;

La salida debe ser,

F g h i j k l m n o
F g h i j k l m n o

Conclusión

En C ++, una matriz se puede copiar manualmente (a mano) o utilizando automáticamente la función std :: copy () desde la biblioteca de algoritmo C ++. En la programación de computadoras, hay copia superficial y hay una copia profunda. La copia superficial es cuando dos nombres de matriz diferentes (antiguos y nuevos) se refieren al mismo contenido en la memoria. La copia profunda es cuando los dos nombres de matriz diferentes se refieren a dos contenido independiente, pero el mismo, en la memoria. Este artículo ha tratado una copia profunda y no una copia superficial.

Con un enfoque manual de copia profunda, se crean dos matrices del mismo tamaño. El primero tiene contenido, mientras que el segundo no tiene contenido. El contenido del primero se copia al segundo, utilizando el for-bucle.

La copia profunda automática de una matriz a otra en C ++ implica la función std :: copy () de la biblioteca de algoritmo C ++. Esto significa que el encabezado de algoritmo (biblioteca) debe incluirse en el programa. No hay necesidad de copiar elemento por elemento con el for-bucle en este caso ya que la copia es automática. El prototipo para la función std :: copy (), interpretada para la matriz, es:

plantilla
Constexpr OutputIterator Copy (arr1, puntero a-element-elemento-de-arg1, arr2);