std :: for_each () en C ++

En este artículo, vamos a ver lo que es la función for_each STL () , y cómo utilizar de manera eficiente que en los programas?

std :: for_each ()

for_each () es una función muy útil que ayuda a invocar una función fn () en cada elemento en el contenedor STL. Esto ayuda realmente a escribir código en class y para reducir el tamaño de nuestra base de código.

A continuación se muestra la sintaxis class la for_each () ,

Sintaxis:

for_each(
InputIterator first,
InputIterator last,
Function fn);

Cuando,

  • InputIterator primera = a partir del recipiente
  • InputIterator última = extremo del recipiente
  • función fn = función que se invoca en cada elemento de recipiente

continuación son ejemplos del uso de for_each () de manera eficiente.

1) Impresión de todos los elementos

short cada uno puede ser utilizado para imprimir elementos en cualquier recipiente. A continuación se muestra el ejemplo en que hemos impreso un vector y un mapa para entender el uso.

#include <bits/stdc++.h>
using namespace std;
void myfunc1(int i)
{
cout << i << " ";
}
void myfunc2(pair<char, int> p)
{ //ecah element of a map is pair
cout << p.first << "->" << p.second << endl;
}
int main()
{
vector<int> arr{ 3, 4, 2, 6, 5, 1 };
map<char, int> mymap;
mymap['a'] = 3;
mymap['c'] = 3;
mymap['b'] = 6;
mymap['d'] = 4;
mymap['e'] = 2;
mymap['f'] = 1;
cout << "Printing the vectorn";
for_each(arr.begin(), arr.end(), myfunc1);
cout << "n";
cout << "Printing the mapn";
for_each(mymap.begin(), mymap.end(), myfunc2);
cout << "n";
return 0;
}

Salida:

Printing the vector
3 4 2 6 5 1
Printing the map
a->3
b->6
c->3
d->4
e->2
f->1

2) Sustituir las vocales con ‘*’

En este ejemplo, vamos a ver cómo actualizar los elementos del recipiente. Podemos actualizar pasando una referencia a los elementos y los cambios dentro de la función. En un artículo temprano, vimos cómo sustituir las vocales usando find_first_of (). En el siguiente programa hemos reemplazado todas las vocales usando for_each () que es más eficiente y sólo toma O (n).

#include <bits/stdc++.h>
using namespace std;
void myfunc(char& c)
{ //to update reference is passed
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'o')
c = '*';
}
int main()
{
string str = "includehelp";
cout << "Initially string is: " << str << endl;
for_each(str.begin(), str.end(), myfunc);
cout << "After updationn";
cout << str << endl;
return 0;
}

Salida:

Initially string is: includehelp
After updation
*nclud*h*lp

Por lo tanto, la ventaja de utilizar for_each () es que reduce el tamaño de la base de código y hace que el nivel de código de producto. Además, la complejidad de tiempo es O (n). Si hay alguna for, donde todos y cada elemento es sometido enorme procesamiento con una gran base de código se puede utilizar for_each ().


Deja un comentario

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