Pasar un vector por referencia en C ++

Pasar un vector por referencia en C ++
Para comprender lo que significa pasar un vector por referencia a una función en C ++, es bueno comprender primero qué es una referencia en general.

Referencia

Considere el siguiente código:

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

La salida es: z z

La primera declaración en el código comienza con la declaración y la asignación a la variable Char, var, el valor, 'y'. La segunda declaración tiene una segunda variable llamada Ref. Sigue siendo de tipo, char. Sin embargo, aquí, existe el y símbolo entre Char y la variable, referencia. No importa si y está más cerca de Char o de Ref.

A la referencia se le asigna la variable, var. Qué quiere decir esto? Debido a y entre Char y Ref, REF y VAR se convierten en nombres alternativos para la misma ubicación de memoria que tiene el carácter, 'Y'. Ahora, se puede usar REF o VAR para cambiar el valor en la ubicación de la memoria. Cuando eso sucede, tanto VAR como REF devolverían el mismo valor. En el código anterior, REF se usó para cambiar el valor.

En el siguiente código, el contenido de la misma ubicación de memoria, mencionada por VAR y REF, se cambia a través de VAR:

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

La salida es la misma: z z

Una variable de referencia es sinónimo de alguna variable original. La variable original en sí misma, sigue siendo una referencia.

Puede haber más de una referencia a una variable original, como muestra el siguiente código:

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

La salida es: z z z

Para tener una referencia, asigne una variable original a una nueva variable; En la declaración de la nueva variable, tener y entre el tipo y la nueva variable.

La ventaja de usar la variable de referencia es que solo hay una copia del valor en la memoria, para los diferentes nombres de variables (sinónimos). Con la programación normal en C ++, si no se necesitan las diferentes ubicaciones de memoria, y cada variable tiene su propia ubicación de memoria, con el mismo valor, esto sería un desperdicio de memoria.

Vector y referencia

Vector es una clase de la que se crean objetos vectoriales (instanciados). Para usar la clase Vector, la biblioteca Vector debe incluirse en el programa. Existe la variable de objeto vectorial original. A esto, se pueden asociar otras variables de referencia (sinónimo). Hacer una variable de referencia vectorial se realiza en la declaración como con el objeto fundamental anterior (char). El siguiente programa ilustra esto:

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

vector VTR;
vector & vtrref1 = vtr;
vector & vtrref2 = vtr;
regresar 0;

La biblioteca de vector se incluye en el programa. Se pretende un vector de cadenas, por lo que la biblioteca de cadenas también está incluida. Tenga en cuenta el uso y la posición de y en las declaraciones de segundo y tercer vector. Las tres variables de objetos vectoriales, VTR, VTREF1 y VTRREF2 son sinónimos o referencias a la misma ubicación de memoria.

VTRREF1 y VTRREF2 se utilizan en un programa de la misma manera que VTR, sin precedir a ninguno con ninguno con &. En otras palabras, VTR [5], Vtrref1 [5] y Vtrref2 [5] World devuelve el mismo valor ubicado en la misma ubicación de memoria.

Ventaja de usar un vector de referencia

El contenido de un objeto vectorial puede ser muy largo. Por lo general, no es deseable tener múltiples copias de la misma lista larga en la memoria. De vez en cuando, es deseable tener dos referencias del mismo vector en la memoria. Esto es particularmente útil al pasar un vector a una función. Si el vector no se pasa por referencia (o puntero), habrá dos copias del mismo vector en la memoria en el programa. Es decir, el cuerpo de la función tendrá una copia del vector en la memoria que es diferente del vector original fuera del cuerpo de la función. Una forma de evitar tales dos copias pero aún tener dos variables es pasar por referencia. De esta manera, la variable en el cuerpo de la función y la variable fuera del cuerpo de la función se referirían al mismo vector.

Pasar un vector por referencia a una función

Es sencillo pasar un vector por referencia a una función. Para hacer esto, tenga el vector original fuera de la función; Deje que el parámetro de la definición de función sea la declaración del vector con los ampers y (&), entre el tipo de vector y el nombre del parámetro. El nombre del parámetro del vector y el nombre original del vector pueden ser diferentes. El nombre original del vector es el argumento de la llamada de función. De esta manera, el nombre del vector en el cuerpo de la función, y el nombre del vector fuera del cuerpo de la función, son dos nombres diferentes que se refieren al mismo vector.

Imagina un vector de nombres de animales. El encabezado del programa sería:

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

El vector fuera de la función puede ser:

vector animales = "tigre", "lobo", "león", "jirafa", "oso";

La función de interés puede ser:

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

En este punto, el nombre del vector fuera de la función son los animales, y el nombre del vector dentro de la función es VTR. Ambos nombres se refieren al mismo objeto vectorial en la memoria. Si algún elemento del vector se cambia dentro de la función, el cambio se verá en la variable de vector fuera de la función. Si algún elemento del vector se cambia fuera de la función, el cambio se verá en la variable de vector dentro de la función. Sin embargo, no se ha realizado tal cambio en este programa, aunque. La función simplemente muestra el contenido vectorial, que es el mismo dentro de la función y fuera de la función. Tenga en cuenta el uso y la posición del símbolo, y en la declaración de parámetros. La función principal de C ++ puede ser:

int main ()

fn (animales);
regresar 0;

El nombre variable del vector fuera de la función es el argumento de la llamada de función. La salida es:

tigre, lobo, león, jirafa, oso,

Nota: Tan pronto como la función comienza a ejecutar, la siguiente declaración se realiza en la función:

vector & vtr = animales;

Esta declaración es muy similar a una declaración de objeto fundamental anterior, que es:

char & ref = var;

Conclusión

Un nombre normal y el nombre a referenciado de un vector son sinónimos del mismo vector. Esto significa que se refieren a la misma ubicación de memoria. Para pasar un vector a una función por referencia, la declaración de parámetros del vector en las paréntesis de la función debe tener y entre el tipo de vector y el nombre del vector. Este nombre entre paréntesis es oficialmente el nombre referenciado. En la llamada de función, el nombre normal de la variable vectorial original fuera de la definición de función se convierte en el argumento de la función. Los dos nombres pueden ser diferentes. Dentro de la definición de función, y no precedió al nombre de vector.