Función devolver un vector en c ++

Función devolver un vector en c ++
¿Puede una función devolver un vector en c?++? La razón por la cual se hace esta pregunta es porque una función no puede devolver una matriz (que es similar a un vector) en C++. La respuesta es simple. Sí, una función puede devolver un vector en C ++ y de diferentes maneras. Este artículo explica las diferentes formas en que una función C ++ puede devolver un vector.

Para codificar un vector en C ++, la biblioteca vectorial debe incluirse en el programa. La biblioteca vectorial tiene la clase vectorial desde la cual se pueden instanciar objetos vectoriales (creado).

El programa en el que son todas las muestras de código de este artículo comienza con:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;

Se utiliza un vector de cadenas.

Contenido del artículo

- Vector de devolución por nombre de vector normal

- Devolver un vector literal

- Devolver una referencia vectorial

- Devolver un puntero vectorial

- Conclusión

Vector de devolución por nombre de vector normal

Deje que el vector de interés sea:

vector store = "pan", "carne", "arroz", "salsa de tomate", "queso";

El vector es una lista de artículos en una pequeña tienda de comestibles. El nombre, el almacén de este vector, se enviará como un argumento a una función, cuyo parámetro es un vector, pero con el nombre, VTR. La función de interés puede ser:

vector FN (vector vtr)
return vtr;

Observe el tipo de retorno de la definición de función. El nombre del vector es la tienda. Este es el argumento para la llamada de función. El parámetro para la función correspondiente al vector es:

vector VTR

Tenga en cuenta que el argumento para la función y el nombre del parámetro son diferentes (aún pueden ser el mismo). Tan pronto como la función comienza a ejecutar, se realiza la siguiente declaración:

vector vtr = almacenar;

Esta declaración es equivalente a las siguientes dos declaraciones:

vector store = "pan", "carne", "arroz", "salsa de tomate", "queso";
vector vtr = almacenar;

Y así, VTR es una copia del vector, la tienda. En este punto, hay dos vectores con el mismo contenido en la memoria para el programa. Una función principal de C ++ apropiada para el código puede ser:

int main ()

vector v = fn (almacén);
para (int i = 0; icout << v[i] << ", ";
cout << endl;
regresar 0;

Observe que la tienda de palabras es el argumento de la llamada de función. Cuando se llama a la función, se producen dos copias del mismo contenido vectorial en la memoria. La función (llamada) devuelve un vector, que es recibido por otro vector, v. Cuando termina el programa, hay tres vectores de la misma copia en la memoria. Estas tres copias del mismo contenido pueden reducirse a una copia utilizando un vector de referencia o un vector de puntero. La salida para el programa anterior es:

pan, carne, arroz, salsa de tomate, queso,

Devolver un vector literal

Hoy (en 2022), un vector literal es lo mismo que una matriz literal. Este literal se llama inicializador_list, hoy en C++. Entonces, devolver un vector literal por una función, es lo mismo que devolver un inicializador_list. Deje que el initlializer_list sea:

"pan", "carne", "arroz", "salsa de tomate", "queso"

Deje que la definición de función para devolver el inicializador_list sea,

vector fn ()
regresar "pan", "carne", "arroz", "salsa de tomate", "queso";

El inicialyer_list se compone en el lugar en la instrucción de retorno y se devuelve. La definición de función no tiene parámetro, pero tiene el mismo tipo de retorno que su contraparte en la sección anterior. Deje que la función principal de C ++ sea:

int main ()

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

La llamada de función, esta vez, no tiene argumento, pero el valor de retorno es recibido por el mismo vector y tipo de la sección anterior.

Para cuando se complete el programa, ¿habría dos copias del mismo vector en la memoria?? No. Solo habría una copia, que es V. El inicialyer_list es un tipo de expresión, llamada rValue. Cuando este tipo de expresión ya no se necesita en la memoria, puede ser borrado por C ++ para tener más espacio de memoria? No es importante si permanece en la memoria después de que se haya utilizado mientras el programa continúa ejecutándose. Se borraría si se necesita su espacio. La salida del programa es:

pan, carne, arroz, salsa de tomate, queso,

Devolver una referencia vectorial

El programa aquí hará lo que ha hecho el primer programa anterior, pero solo con una copia del mismo vector. Sin embargo, habrá tres nombres diferentes para el mismo vector. Deje que el vector de interés sea:

vector store = "pan", "carne", "arroz", "salsa de tomate", "queso";
La variable, la tienda aquí, es un nombre ordinario. Deje que la función de interés sea:
vector & fn (vector & vtr)
return vtr;

Tenga en cuenta la presencia y posición de y en el parámetro. Significa que VTR es un vector referenciado (sinónimo), y no una copia del argumento que se enviará. Tenga en cuenta la presencia y posición de y en el tipo de retorno. Significa que la referencia (sinónimo) de un vector será devuelta por la función. Tenga en cuenta que la declaración interna, "return vtr;" no tiene &. Deje que la función principal de C ++ sea:

int main ()

vector *v = & fn (tienda);
para (int i = 0; itamaño(); i ++)
cout << (*v)[i] << ", ";
cout << endl;
regresar 0;

La firma de la definición de función, y la instrucción de llamada de función son:

vector & fn (vector & vtr)

y

vector *v = & fn (tienda);

respectivamente. Tenga en cuenta nuevamente, la presencia y posición de &, en el tipo de retorno de la definición de función. Tenga en cuenta la presencia y posición de y en la instrucción de llamada de función. El argumento de la llamada de función es el nombre ordinario del vector, almacenar. La función devuelve una referencia, y es recibida por un puntero, v.

Y así, hay tres variables diferentes en el programa, todas refiriéndose a la misma ubicación de memoria vectorial (la función devuelta y VTR, que es un sinónimo de almacenamiento). La salida es:

pan, carne, arroz, salsa de tomate, queso,

Devolver un puntero vectorial

El programa aquí hará lo que ha hecho el primer programa anterior, pero solo con una copia del mismo vector. Habrá tres nombres diferentes para el mismo vector. Deje que el vector de interés sea:

vector store = "pan", "carne", "arroz", "salsa de tomate", "queso";
La variable, la tienda aquí, es un nombre ordinario. Deje que la función de interés sea:
vector * FN (vector *vtr)
return vtr;

Tenga en cuenta la presencia y posición de * en el parámetro. Significa que VTR es un vector de puntero, y no una copia de ningún argumento vectorial que se enviará. Tenga en cuenta la presencia y posición de * en el tipo de retorno. Nuevamente, tenga en cuenta que la declaración interna, "return vtr;" no tiene & o *. Deje que la función principal de C ++ sea:

int main ()

vector *v = fn (& store);
para (int i = 0; itamaño(); i ++)
cout << (*v)[i] << ", ";
cout << endl;
regresar 0;

La firma de la definición de función, y la instrucción de llamada de función son:

vector * FN (vector *VTR)

y

vector *v = fn (& store);

respectivamente. Tenga en cuenta la presencia y posición de * en el tipo de retorno de la definición de función. Tenga en cuenta la presencia y posición de y en la instrucción de llamada de función; Está frente al argumento, almacena y no frente a fn (), que no tiene & o *. La función devuelve una referencia, y es recibida por un puntero, v.

Y así, hay tres variables diferentes en el programa, todas refiriéndose a la misma ubicación de memoria vectorial. La salida es:

pan, carne, arroz, salsa de tomate, queso,

Conclusión

Una función puede devolver un vector por su nombre normal. Una función puede devolver un vector literal (inicializador_list), que se recibirá por un vector normal (nombre). Un vector puede devolver una referencia de vector, que se recibirá por un puntero de vectores. Un vector puede devolver un puntero vectorial, aún por ser recibido por otro puntero vectorial.