Como copiar uma matriz em C ++

Como copiar uma matriz em C ++
Em C ++, uma matriz pode ser copiada manualmente (à mão) ou usando a função std :: cópia (), da biblioteca de algoritmo C ++. Na programação de computadores, há cópia superficial e há cópia profunda. Cópia superficial é quando dois nomes diferentes de matriz (antigos e novos), consulte o mesmo conteúdo. Cópia profunda é quando os dois nomes diferentes de matriz se referem a dois independentes, mas o mesmo conteúdo, na memória. Este artigo lida com cópia profunda.

Considere a seguinte matriz:

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

Esta é uma variedade de dez caracteres das letras, 'f' para 'O'. O nome desta matriz é arr1. Considere a seguinte matriz:

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

O nome desta matriz é arr2. Observe que ambos os conteúdos são os mesmos. ARR2 seria uma cópia profunda do ARR1 se ambos o Initializer_lists estivessem em diferentes regiões na memória do computador. Este artigo explica, cópia manual profunda da matriz e cópia profunda automática da matriz, em c++.

Conteúdo do artigo

- Cópia profunda manual da matriz

- Cópia profunda automática da matriz

- Conclusão

Cópia profunda manual da matriz

Com esta abordagem, duas matrizes do mesmo tamanho são criadas. O primeiro tem conteúdo enquanto o segundo não tem conteúdo. O conteúdo do primeiro é copiado no segundo usando o loop for. O programa a seguir ilustra o seguinte:

#incluir
usando namespace std;
int main ()

#Define Tamanho 10
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char arr2 [tamanho];
para (int i = 0; iarr2 [i] = arr1 [i];
retornar 0;

A primeira linha do programa inclui o cabeçalho C ++ iostream (biblioteca) para entrada e saída. Esta primeira linha é uma diretiva. A segunda linha não é uma diretiva. É uma declaração. Ele insiste que qualquer nome não precedido por std :: é do espaço de nome padrão. Depois disso é a função principal C ++.

A primeira linha na função principal () é uma diretiva. Ele define o tamanho de ambas as matrizes, para ser 10. Não termina com um semicolon. Termina com a imprensa do teclado Enter a tecla '\ n' . Essa linha poderia ter sido igualmente "int size = 10;". A linha depois é uma declaração que define a primeira matriz. A linha a seguir é a declaração da segunda matriz, sem inicialização prática, mas com o mesmo tamanho.

O próximo segmento de código na função principal faz a cópia, elemento por elemento, do primeiro ao segundo array.

Os dois segmentos de código a seguir podem ser adicionados, para imprimir ambos os conteúdos da matriz no terminal (console):

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

A saída deve ser,

F G H I J K L M N O
F G H I J K L M N O

Cópia profunda automática da matriz

Aqui, a função std :: cópia (), da biblioteca de algoritmo C ++ é usada. Isso significa que o cabeçalho do algoritmo (biblioteca) deve ser incluído no programa. Não há necessidade de copiar, elemento por elemento, aqui. O protótipo da função std :: cópia () é:

modelo
Cópia do ConstexPr OutputIterator (InputIterator Primeiro, InputIterator Último,
Resultado outputIterator resultado);

O primeiro argumento é um iterador que aponta para o primeiro elemento do contêiner de origem (lista). O segundo argumento é um iterador que aponta logo além do último elemento do contêiner de origem. O terceiro argumento é um iterador que aponta para o primeiro elemento do contêiner de destino vazio, que já deveria ter sido declarado.

Esta sintaxe pode ser interpretada para matrizes com o seguinte protótipo:

modelo
Cópia do constExPr OutputIterator (ARR1, ponteiro para just-past-ARR1, ARR2);

Ponteiro para just-past-ARR1 é o mesmo que o tamanho de ARR1 +. Portanto, o programa a seguir, cópia profunda automática de uma matriz para outra:

#incluir
#incluir
int main ()

int size = 10;
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char arr2 [tamanho];
cópia (ARR1, ARR1+Tamanho, ARR2); // cópia automática
retornar 0;

Observe a inclusão da biblioteca de algoritmo. "Int size = 10;" foi usado, em vez de "char arr2 [tamanho];". Observe que as matrizes ainda tinham que ser do mesmo tamanho, mas com o segundo vazio. A declaração automática de cópia é:

cópia (ARR1, ARR1+Tamanho, ARR2);

A função não precisou ser precedida por "STD ::", pois existe "usando namespace std". no topo do programa.

Os dois segmentos de código a seguir podem ser adicionados para imprimir ambos os conteúdos da matriz no terminal (console):

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

A saída deve ser,

F G H I J K L M N O
F G H I J K L M N O

Conclusão

Em C ++, uma matriz pode ser copiada manualmente (à mão) ou automaticamente usando a função std :: cópia () da biblioteca de algoritmo C ++. Na programação de computadores, há cópia superficial e há cópia profunda. Cópia superficial é quando dois nomes diferentes de matriz (antigo e novo) se referem ao mesmo conteúdo na memória. Cópia profunda é quando os dois nomes diferentes de matriz se referem a dois independentes, mas o mesmo conteúdo, na memória. Este artigo lidou com cópia profunda e não cópia superficial.

Com a abordagem de cópia profunda manual, duas matrizes do mesmo tamanho são criadas. O primeiro tem conteúdo, enquanto o segundo não tem conteúdo. O conteúdo do primeiro é copiado para o segundo, usando o loop for.

A cópia profunda automática de uma matriz para outra em C ++ envolve a função std :: copy () da biblioteca de algoritmo C ++. Isso significa que o cabeçalho do algoritmo (biblioteca) deve ser incluído no programa. Não há necessidade de copiar o elemento por elemento com o loop for neste caso, já que a cópia é automática. O protótipo da função std :: copy (), interpretado para a matriz, é:

modelo
cópia do constExPr OutputIterator (ARR1, ponteiro para o elementos do elemento-ar1, ARR2);