Passando um vetor por referência em C ++

Passando um vetor por referência em C ++
Para entender o que significa passar um vetor por referência a uma função em C ++, é bom entender primeiro o que é uma referência em geral.

Referência

Considere o seguinte código:

char var = 'y';
char & ref = var;
ref = 'z';
cout << var << " << ref << endl;

A saída é: z z

A primeira declaração no código começa com a declaração e a atribuição à variável de char, var, o valor, 'y'. A segunda declaração tem uma segunda variável chamada ref. Ainda é do tipo, char. No entanto, aqui, há o símbolo entre char e a variável, referência. Não importa se e estão mais próximos de char ou de referência.

Para ref é atribuído a variável, var. O que isto significa? Por causa de e entre char e ref, ref e var se tornam nomes alternativos para o mesmo local de memória que tem o personagem, 'y'. Agora, ref ou var pode ser usado para alterar o valor no local da memória. Quando isso acontece, ambos VAR e Ref retornariam o mesmo valor. No código acima, o REF foi usado para alterar o valor.

No código a seguir, o conteúdo do mesmo local de memória, referido por VAR e REF, é alterado através do VAR:

char var = 'y';
char & ref = var;
var = 'z';
cout << var << " << ref << endl;

A saída é a mesma: z z

Uma variável de referência é sinônimo de alguma variável original. A variável original em si, ainda é uma referência.

Pode haver mais de uma referência a uma variável original, como mostra o código a seguir:

char var = 'y';
char & ref1 = var;
char & ref2 = var;
ref2 = 'z';
cout << var << " << ref1 << " << ref2 << endl;

A saída é: z z z

Para ter uma referência, atribua uma variável original a uma nova variável; na declaração da nova variável, tem e entre o tipo e a nova variável.

A vantagem de usar a variável de referência é que existe apenas uma cópia do valor na memória, para os diferentes nomes de variáveis ​​(sinônimos). Com a programação normal em C ++, se os diferentes locais de memória não forem necessários, e cada variável tiver seu próprio local de memória, com o mesmo valor, isso seria desperdício de memória.

Vetor e referência

Vector é uma classe a partir da qual os objetos vetoriais são criados (instanciados). Para usar a classe vetorial, a biblioteca vetorial deve ser incluída no programa. Existe a variável de objeto vetorial original. Para isso, outras variáveis ​​de referência (sinônimo) podem ser associadas. Fazer uma variável de referência vetorial é feita na declaração, como no objeto fundamental acima (char). O programa a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

vetor vtr;
vetor & vtrref1 = vtr;
vetor & vtrref2 = vtr;
retornar 0;

A biblioteca vetorial está incluída no programa. Um vetor de strings está pretendido, portanto a biblioteca de cordas também está incluída. Observe o uso e a posição de e na segunda e terceira declarações de vetor. Todas as três variáveis ​​de objeto vetor.

Vtrref1 e Vtrref2 são usados ​​em um programa da mesma maneira que a VTR, sem preceder nenhum com &. Em outras palavras, VTR [5], Vtrref1 [5] e Vtrref2 [5] World retornam o mesmo valor localizado no mesmo local de memória.

Vantagem de usar um vetor de referência

O conteúdo de um objeto vetorial pode ser muito longo. Geralmente não é desejável ter várias cópias da mesma lista longa na memória. De tempos em tempos, é desejável ter duas referências do mesmo vetor na memória. Isso é particularmente útil ao passar um vetor para uma função. Se o vetor não for aprovado por referência (ou ponteiro), haverá duas cópias do mesmo vetor na memória no programa. Ou seja, o corpo da função terá uma cópia do vetor na memória que é diferente do vetor original fora do corpo da função. Uma maneira de evitar essas duas cópias, mas ainda ter duas variáveis, é passar por referência. Dessa forma, a variável no corpo da função e a variável fora do corpo da função se refeririam ao mesmo vetor.

Passando um vetor por referência a uma função

É simples passar um vetor por referência a uma função. Para fazer isso, tenha o vetor original fora da função; Deixe o parâmetro da definição da função ser a declaração do vetor com os ampers-e (&), entre o tipo de vetor e o nome do parâmetro. O nome do parâmetro do vetor e o nome original do vetor podem ser diferentes. O nome original do vetor é o argumento da chamada de função. Dessa maneira, o nome do vetor no corpo da função e o nome do vetor fora do corpo da função são dois nomes diferentes que se referem ao mesmo vetor.

Imagine um vetor de nomes de animais. O título para o programa seria:

#incluir
#incluir
#incluir
usando namespace std;

O vetor fora da função pode ser:

vetor animais = "tigre", "lobo", "leão", "girafa", "urso";

A função do interesse pode ser:

void fn (vetor & vtr)
para (int i = 0; icout << vtr[i] << ", ";
cout << endl;

Neste ponto, o nome do vetor fora da função é os animais, e o nome do vetor dentro da função é VTR. Ambos os nomes se referem ao mesmo objeto vetorial na memória. Se algum elemento do vetor for alterado dentro da função, a mudança será vista na variável vetorial fora da função. Se algum elemento do vetor for alterado fora da função, a mudança será vista na variável vetorial dentro da função. Nenhuma mudança foi feita neste programa, embora. A função simplesmente exibe o conteúdo do vetor, que é o mesmo dentro da função e fora da função. Observe o uso e a posição do símbolo e na declaração de parâmetro. A função principal C ++ pode ser:

int main ()

fn (animais);
retornar 0;

O nome variável do vetor fora da função é o argumento da chamada de função. A saída é:

tigre, lobo, leão, girafa, urso,

Nota: Assim que a função começar a executar, a seguinte declaração é feita na função:

vetor & vtr = animais;

Esta declaração é muito semelhante a uma declaração de objeto fundamental acima, que é:

char & ref = var;

Conclusão

Um nome normal e o nome referenciado de um vetor são sinônimos do mesmo vetor. Isso significa que eles se referem ao mesmo local de memória. Para passar um vetor para uma função por referência, a declaração de parâmetro do vetor nos parênteses da função precisa ter e entre o tipo de vetor e o nome do vetor. Este nome nos parênteses é oficialmente o nome referenciado. Na chamada de função, o nome normal da variável vetor original fora da definição da função se torna o argumento da função. Os dois nomes podem ser diferentes. Na definição da função, e não precedeu o nome do vetor.