Função retornando um vetor em c ++

Função retornando um vetor em c ++
Uma função pode retornar um vetor em c++? A razão pela qual essa pergunta é feita é porque uma função não pode retornar uma matriz (que é semelhante a um vetor) em c++. A resposta é simples. Sim, uma função pode retornar um vetor em C ++ e de maneiras diferentes. Este artigo explica as diferentes maneiras pelas quais uma função C ++ pode retornar um vetor.

Para codificar um vetor em C ++, a biblioteca vetorial deve ser incluída no programa. A biblioteca vetorial possui a classe vetorial a partir da qual os objetos vetoriais podem ser instanciados (criados).

O programa em que todas as amostras de código deste artigo começa com:

#incluir
#incluir
#incluir
usando namespace std;

Um vetor de cordas é usado.

Conteúdo do artigo

- Vetor de retorno pelo nome do vetor normal

- Retornando um vetor literal

- Retornando uma referência de vetor

- Retornando um ponteiro vetorial

- Conclusão

Vetor de retorno pelo nome do vetor normal

Que o vetor de interesse seja:

vetor armazenar = "pão", "carne", "arroz", "molho de tomate", "queijo";

O vetor é uma lista de itens em um pequeno supermercado. O nome, loja deste vetor, deve ser enviado como um argumento para uma função, cujo parâmetro é um vetor, mas com o nome, VTR. A função do interesse pode ser:

vetor fn (vetor vtr)
retornar vtr;

Observe o tipo de retorno da definição de função. O nome do vetor é a loja. Este é o argumento para a chamada de função. O parâmetro para a função correspondente ao vetor é:

vetor vtr

Observe que o argumento para a função e o nome do parâmetro são diferentes (eles ainda podem ser os mesmos). Assim que a função começar a executar, a seguinte declaração é feita:

vetor vtr = store;

Esta declaração é equivalente às duas declarações a seguir:

vetor armazenar = "pão", "carne", "arroz", "molho de tomate", "queijo";
vetor vtr = store;

E assim, VTR é uma cópia do vetor, armazenamento. Neste ponto, existem dois vetores com o mesmo conteúdo na memória para o programa. Uma função principal C ++ apropriada para o código pode ser:

int main ()

vetor v = fn (armazenamento);
para (int i = 0; icout << v[i] << ", ";
cout << endl;
retornar 0;

Observe que o Word Store é o argumento da chamada de função. Quando a função é chamada, duas cópias do mesmo conteúdo vetorial ocorrem na memória. A função (chamada) retorna um vetor, que é recebido por outro vetor, v. Quando o programa terminar, há três vetores da mesma cópia na memória. Essas três cópias do mesmo conteúdo podem ser reduzidas a uma cópia usando um vetor de referência ou vetor de ponteiro. A saída para o programa acima é:

pão, carne, arroz, molho de tomate, queijo,

Retornando um vetor literal

Hoje (em 2022), um vetor literal é o mesmo que uma matriz literal. Este literal é chamado de Initializer_list, hoje em C++. Portanto, retornar um vetor literal por uma função é o mesmo que devolver um Initializer_list. Deixe o initLializer_list ser:

"pão", "carne", "arroz", "molho de tomate", "queijo"

Deixe a definição da função para retornar o Initializer_list ser,

vetor fn ()
retornar "pão", "carne", "arroz", "molho de tomate", "queijo";

O Initializer_list é composto no local na declaração de devolução e devolvido. A definição de função não tem parâmetro, mas tem o mesmo tipo de retorno que seu equivalente na seção anterior. Deixe a principal função C ++ ser:

int main ()

vetor v = fn ();
para (int i = 0; icout << v[i] << ", ";
cout << endl;
retornar 0;

A chamada de função, desta vez, não tem argumento, mas o valor de retorno é recebido pelo mesmo vetor e tipo da seção anterior.

Quando o programa estiver concluindo, haveria duas cópias do mesmo vetor na memória? Não. Haveria apenas uma cópia, que é V. O Initializer_list é um tipo de expressão, chamado Rvalue. Quando esse tipo de expressão não é mais necessário na memória, ela pode ser apagada por C ++ para ter mais espaço de memória? Não é importante se permanece na memória depois de ter sido usado enquanto o programa continua a executar. Seria apagado se seu espaço fosse necessário. A saída do programa é:

pão, carne, arroz, molho de tomate, queijo,

Retornando uma referência de vetor

O programa aqui fará o que o primeiro programa acima fez, mas apenas com uma cópia do mesmo vetor. Haverá três nomes diferentes para o mesmo vetor, embora. Que o vetor de interesse seja:

vetor armazenar = "pão", "carne", "arroz", "molho de tomate", "queijo";
A variável, armazenar aqui, é um nome comum. Que a função do interesse seja:
vetor & fn (vetor & vtr)
retornar vtr;

Observe a presença e a posição de & no parâmetro. Isso significa que o VTR é um vetor referenciado (sinônimo), e não uma cópia do argumento a ser enviada. Observe a presença e a posição de & no tipo de retorno. Isso significa que a referência (sinônimo de um vetor será devolvida pela função. Observe que a declaração interna, "Return vtr;" não tem &. Deixe a função principal C ++ ser:

int main ()

vetor *V = & fn (Store);
para (int i = 0; itamanho(); i ++)
cout << (*v)[i] << ", ";
cout << endl;
retornar 0;

A assinatura da definição da função e a declaração de chamada de função são:

vetor & fn (vetor & vtr)

e

vetor *V = & fn (Store);

respectivamente. Nota novamente, a presença e a posição de &, no tipo de retorno da definição de função. Observe a presença e a posição de & na declaração de chamada de função. O argumento da chamada de função é o nome comum do vetor, armazenamento. A função retorna uma referência e é recebida por um ponteiro, v.

E assim, existem três variáveis ​​diferentes no programa, todas se referindo ao mesmo local de memória vetorial (a função retornada & VTR, que é um sinônimo de loja). A saída é:

pão, carne, arroz, molho de tomate, queijo,

Retornando um ponteiro vetorial

O programa aqui fará o que o primeiro programa acima fez, mas apenas com uma cópia do mesmo vetor. Haverá três nomes diferentes para o mesmo vetor. Que o vetor de interesse seja:

vetor armazenar = "pão", "carne", "arroz", "molho de tomate", "queijo";
A variável, armazenar aqui, é um nome comum. Que a função do interesse seja:
vetor * fn (vetor *vtr)
retornar vtr;

Observe a presença e a posição de * no parâmetro. Isso significa que o VTR é um vetor de ponteiro, e não uma cópia de qualquer argumento vetorial a ser enviado. Observe a presença e a posição de * no tipo de retorno. Novamente, observe que a declaração interna "retorna VTR;" não tem e ou *. Deixe a função principal C ++ ser:

int main ()

vetor *v = fn (& store);
para (int i = 0; itamanho(); i ++)
cout << (*v)[i] << ", ";
cout << endl;
retornar 0;

A assinatura da definição da função e a declaração de chamada de função são:

vetor * fn (vetor *vtr)

e

vetor *v = fn (& store);

respectivamente. Observe a presença e a posição de * no tipo de retorno da definição de função. Observe a presença e a posição de & na declaração de chamada de função; está na frente do argumento, armazenar, e não na frente de Fn (), que não possui & ou *. A função retorna uma referência e é recebida por um ponteiro, v.

E assim, existem três variáveis ​​diferentes no programa, todas se referindo ao mesmo local de memória vetorial. A saída é:

pão, carne, arroz, molho de tomate, queijo,

Conclusão

Uma função pode retornar um vetor pelo seu nome normal. Uma função pode retornar um vetor literal (Initializer_list), a ser recebido por um vetor normal (nome). Um vetor pode retornar uma referência de vetor, a ser recebida por um ponteiro vetorial. Um vetor pode retornar um ponteiro vetorial, ainda a ser recebido por outro ponteiro vetorial.