C ++ std for_each loop

C ++ std for_each loop
"Los bucles STD :: para cada. Este bucle toma una función que se ejecuta a través de cada elemento del contenedor antes de regresar. Para que este bucle funcione, debe incluirse porque se especifica en el archivo de encabezado "Algoritmo": #Clude cada vez que itera a través de los elementos de una matriz o contenedor y realiza varias operaciones en ellos, como acceder, cambiar, etc. Aunque puede obtener el mismo resultado ingresando todo el bucle para el bucle, el uso de este método le ahorrará tiempo, reducirá la cantidad de códigos de programa y reducirá la probabilidad de algunos errores."

Sintaxis de std :: for_each () bucle en c++

La sintaxis de std :: para cada () bucle, implementamos en c ++ es la siguiente:

for_each (begin_iterator, end_iterator, func)


Donde FUNC es una función de un parámetro que toma cada elemento del rango [Begin, End] como argumento, y comienza y finales son los iteradores de entrada que se refieren a los puntos de inicio y finalización de la región en la secuencia para evaluar. A continuación, hemos explicado la funcionalidad de cada parámetro.

begin_iterator: Un iterador de entrada que se refiere a la primera posición en la secuencia que estamos utilizando para la evaluación que comienza el rango.

End_iterator: Un iterador de entrada se refiere al final del rango en la secuencia de evaluación que estamos utilizando.

FUNC: una función con un argumento que toma cada componente del rango [inicio, finalización] como argumento. El parámetro de la función puede suministrarse "por referencia" o "por valor."Esta función podría o no producir un resultado.

Ejemplo 1

Veamos un ejemplo directo en el que usamos la función std :: para cada () función para emitir cada elemento dentro del rango [inicio, final].

#incluir
#incluir
#incluir
void display_item (int item)
std :: cout<
int main ()
std :: matriz int_array = 2,4,6, -6,0,110, -2,77;
std :: cout<<"Displaying the items: \n";
std :: for_each (int_array.begin (), int_array.end (), display_item);
regresar 0;



El código comienza desde la sección del encabezado. Tenemos tres archivos de encabezado de C++. Para utilizar el bucle std :: for_each, hemos agregado el archivo de encabezado de algoritmo. Luego, hemos creado la función void como display_item, que toma un elemento de entrada del tipo de datos int int. Dentro de esa función, solo tenemos el comando std :: cout para esta variable de elemento.

A continuación, tenemos la función principal donde hemos declarado e inicializado una matriz. El bucle std :: for_each se usa para recorrer cada elemento en la matriz dada. Se llama a la función display_item para mostrar la matriz de elementos dentro del rango [begin, final] por solo una vez.

Ejemplo 2

Utilizando std :: para cada uno para hacer alteraciones persistentes en la colección. La función proporcionada toma los parámetros "referencia" para modificar los elementos de la colección de forma permanente.

#incluir
#incluir
#incluir
void func_upperCase (std :: string & str_val)
para (int i = 0; iif (str_val [i]> = 'a' y str_val [i] <= 'z')
str_val [i] = (char) (str_val [i]-'a' + 'a');



int main ()
std :: cout<<"output: \n";
std :: matriz str_array = "el", "programa", "de",
"C ++";
std :: for_each (str_array.begin (), str_array.end (), func_upperCase);
para (int i = 0; istd :: cout<
regresar 0;



Aquí en el paso inicial, hemos importado los archivos de encabezado para la implementación del programa. Después de eso, construimos una función func_uppercase para transformar la cadena de casos inferiores en la cadena de casos superiores. Luego, desplegamos el método principal donde definimos una variedad de cadenas que tiene todas las minúsculas. El bucle std :: for_each se usa para iterar sobre todos los caracteres de cadena. El bucle std :: for_each invoca la función func_uppercase como un argumento para cada carácter de cadena en el rango [begin, end]. Después de eso, tenemos un bucle for para imprimir todos los caracteres de cadena después de la conversión en la caja superior.

Puede visualizar en la pantalla de salida que todos los caracteres de cadena en minúscula se transforman en mayúsculas.

Ejemplo 3

El ejemplo que sigue emplea una función lambda para aumentar cada miembro en un vector antes de calcular su suma usando un operador sobrecargado () en el objeto de una función, también conocido como functor.

#incluir
#incluir
#incluir
struct add
Add () add = 0;
Operator void () (int n) add += n;
int agregar;
;
int main ()

std :: vector números 4, 5, 1, 8, 16, 221;
std :: cout << "Numbers before: ";
para (auto n: números)
std :: cout << n << " ";

std :: cout << '\n';
std :: for_each (números.begin (), números.end (), [] (int & n) n ++; );
Agregar a = std :: for_each (números.begin (), números.end (), add ());
std :: cout << "Numbers after: ";
para (auto n: números)
std :: cout << n << " ";

std :: cout << '\n';
std :: cout << "Result: " << a.add << '\n';



Aquí, hemos establecido una estructura y le hemos asignado un nombre. La función add () también se define allí, y dentro de esa función, inicializamos la variable ADD con el número cero. Además, la función vacía se crea con el operador de nombre, que incrementa el valor de n. Luego viene el método principal de este programa.

Dentro del método principal, hemos declarado la clase vectorial donde hemos inicializado la lista de números aleatorios. Hemos impreso los números usando el bucle for For. Después de eso, tenemos std :: for_each loop para la iteración sobre cada elemento en la lista de números, y luego cada elemento en la lista se incrementa. Hemos impreso los números después de la operación de bucle for_each. Al final, hemos mostrado la suma de los números creando el objeto como A invocando la variable Agregar.

Los números se generan antes y después del bucle for_each como salida. Además, la suma de los números se muestra a continuación.

Ejemplo 4

La impresión de elementos en cualquier contenedor es posible con la función std :: for_each. Para comprender cómo usarlo, vea el ejemplo en el que imprimimos un vector y un mapa a continuación.

#incluir
#incluir
#incluir
#incluir
usando el espacio de nombres STD;
función void_1 (int i)

cout << i << " ";

FUNCIÓN VOCAL_2 (par P1)

cout << p1.first << "->" << p1.second << endl;

int main ()

vector matriz 2, 5, 1, 9, 3, 8;
mapa map_val;
map_val ['a'] = 2;
map_val ['b'] = 3;
map_val ['c'] = 6;
map_val ['d'] = 5;
map_val ['e'] = 8;
map_val ['f'] = 9;
cout << "Displaying the vector\n";
for_each (matriz.begin (), matriz.end (), function_1);
cout << "\n";
cout << "Displaying the map\n";
for_each (map_val.begin (), map_val.end (), function_2);
cout << "\n";
regresar 0;



Hemos definido la función como función_1 donde se declara la variable "i", y dentro de esa función, hemos mostrado el "i" con el comando cout. Luego, construimos otra función como function_2, que se llama clase de par, y establece el objeto P. Dentro de la función_2, hemos definido cada elemento en un par para el mapa. Luego, dentro de la función principal, inicializamos una matriz de vectores y también mapeamos valores. Luego, utilizamos el bucle for_each para los vectores y los mapas para la iteración en cada elemento.

La ejecución del programa anterior generó la siguiente salida.

Conclusión

Por lo tanto, la utilización de std :: for_each () tiene el beneficio de hacer el nivel de producto del programa y reducir el tamaño de la base de código. Además, o (n) es la complejidad temporal. Puede usar std :: for_each () en cualquier situación cuando cada elemento debe pasar por mucho procesamiento y tiene una gran base de código. El std más flexible :: for_each (). Cualquier tipo de contenedor se puede usar con iteración. Además de std :: for_each (), nos permite crear un algoritmo que funcione con un iterador.