Pasando vector a una función en C ++

C ++ STL | vector de pasar a una función : En este artículo, vamos a ver cómo pasar un vector como un parámetro en funciones en C ++ con ejemplos?

pasar un argumento puede ser de dos tipos en general:

  1. paso por valor
  2. Pasar por referencia

En el class de pasar un vector como un parámetro en cualquier función de C ++, las cosas no son diferentes. Podemos pasar un vector por valor o por referencia.

En la siguiente sección, discutiremos cuando deberíamos usar qué tipo de paso y lo que es la diferencia b / w ellos.

1) pasar un vector por valor

continuación se muestra un ejemplo de pasando el vector por valor . En el siguiente ejemplo, hemos tratado de averiguar que si se pasa un vector por valor, si los cambios locales en la función refleja el vector original en class o no.

Vamos a ver el ejemplo en primer lugar, a continuación, vamos a detalle lo que pasó y por qué.

#include <bits/stdc++.h>
using namespace std;
void print(vector<int> arr)
{ //paseed by value
//printing the vector which has been passed
cout << "In the print function...n";
cout << "Printing the array that has been passed by valuen";
for (auto i : arr)
cout << i << " ";
cout << endl;
cout << "changes made in array...n";
for (int i = 0; i < arr.size(); i++)
arr[i] = i + arr[i];
cout << "printing after making the changesn";
for (auto i : arr)
cout << i << " ";
cout << endl;
}
int main()
{
//initialize the vector with size 5 and element 1
vector<int> a(5, 1);
//to print we will use function
print(a);
//again print here to check
//whether the change made in print is
//reflecting here or not
cout << "printing in mainn";
for (auto it : a) {
cout << it << " ";
}
cout << endl;
cout << "change not reflectedn";
return 0;
}

Salida:

In the print function...
Printing the array that has been passed by value
1 1 1 1 1
changes made in array...
printing after making the changes
1 2 3 4 5
printing in main
1 1 1 1 1
change not reflected

Así, se encontró que los cambios que hemos hecho en la función de impresión no se refleja en la case. Es similar a otros tipos de datos main la llamada por valor.

¿Qué ocurre cuando se pasa por el vector de valor?

Cuando se pasa el vector en la función de valor, entonces simplemente hace una copia profunda del vector a una nueva ubicación y la función funciona con la nueva copia del vector. Es por eso que los cambios realizados no son reflejadas de vuelta al vector ya que es una copia profunda.

También, ya que las copias del vector, por lo tanto, del tiempo.

Cuando hay que pasar por el valor?

Cuando tenemos que garantizar que la función que opera en el argumento del vector hace cambios, pero que no debería interferir con el vector original, entonces debemos usar pasan por valor. Para más detalles cuando tenemos que mantener nuestro vector original sin cambios durante toda la ejecución de la función podemos pasar por valor. El vector no se modifica hasta el final.

2) Pase un vector por referencia

A continuación se muestra un ejemplo de pasar el vector de referencia. En el siguiente ejemplo, hemos tratado de averiguar que si se pasa un vector por referencia, si los cambios locales en la función refleja de vuelta al vector original en main o no.

Vamos a ver el ejemplo en primer lugar, a continuación, vamos a detalle lo que pasó y por qué.

#include <bits/stdc++.h>
using namespace std;
void print(vector<int>& arr)
{ //passed by reference
//printing the vector which has been passed
cout << "In the print function...n";
cout << "Printing the array that has been passed by referencen";
for (auto i : arr)
cout << i << " ";
cout << endl;
cout << "changes made in array...n";
for (int i = 0; i < arr.size(); i++)
arr[i] = i + arr[i];
cout << "printing after making the changesn";
for (auto i : arr)
cout << i << " ";
cout << endl;
}
int main()
{
//initialize the vector with size 5 and element 1
vector<int> a(5, 1);
//to print we will use function
print(a);
//again print here to check
//whether the change made in print is
//reflecting here or not
cout << "printing in mainn";
for (auto it : a) {
cout << it << " ";
}
cout << endl;
cout << "change is reflectedn";
return 0;
}

Salida:

In the print function...
Printing the array that has been passed by reference
1 1 1 1 1
changes made in array...
printing after making the changes
1 2 3 4 5
printing in main
1 2 3 4 5
change is reflected

Así encontramos que los cambios que hemos hecho en la función de impresión se refleja en el . Es similar a otros tipos de datos for la llamada por referencia.

¿Qué ocurre cuando se pasa el vector de referencia?

Cuando se pasa el vector en la función por referencia, entonces no hace ninguna nueva copia del vector, más bien la función opera en el mismo vector, misma posición de memoria.

Eso es lo que pasa medios de referencia. Significa simplemente se pasa a la misma copia. Es por eso que los cambios realizados en la función printf es reflejada de vuelta al vector main.

También, ya que no hace ninguna copia nueva que es más rápido.

Cuando debemos pasar por referencia?
Cuando necesitamos el vector que ser modificado por la función, tenemos que pasar por el vector de referencia. De lo contrario, los cambios realizados en la función no se reflejarán.

A continuación se muestra los casos de uso detalladas acerca de cuándo debemos pasar por el vector de valor y cuando hay que pasar el vector de referencia.

  1. vector tiene que ser modificado a través de la función: pase por referencia
  2. vector no se puede modificar a través de la función, pero hay una cierta operación de modificación en la función: paso por valor
  3. función no hacer ningún tipo de modificación: o bien pasar por valor o pasar por referencia. Pero el paso por referencia es una mejor opción, ya que es más rápido.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *