Aparte de las técnicas genéricas de looping , como “for, while y do-while”, C++ en su lenguaje también nos permite utilizar otra funcionalidad que resuelve el mismo propósito denominada loops “for-each”. Este bucle acepta una función que se ejecuta sobre cada uno de los elementos del contenedor. Este ciclo se define en el archivo de encabezado «algoritmo»: #include<algoritmo> y, por lo tanto, debe incluirse para que este ciclo funcione correctamente.
- Es versátil, es decir, puede funcionar con cualquier contenedor.
- Reduce las posibilidades de errores que uno puede cometer usando genérico for loop
- Hace que el código sea más legible.
- los bucles for_each mejoran el rendimiento general del código
Sintaxis:
for_each (InputIterator start_iter, InputIterator last_iter, Function fnc) start_iter : The beginning position from where function operations has to be executed. last_iter : The ending position till where function has to be executed. fnc/obj_fnc : The 3rd argument is a function or an object function which operation would be applied to each element.
CPP
// C++ code to demonstrate the // working of for_each loop #include<iostream> #include<vector> #include<algorithm> using namespace std; // helper function 1 void printx2(int a) { cout << a * 2 << " "; } // helper function 2 // object type function struct Class2 { void operator() (int a) { cout << a * 3 << " "; } } ob1; int main() { // initializing array int arr[5] = { 1, 5, 2, 4, 3 }; cout << "Using Arrays:" << endl; // printing array using for_each // using function cout << "Multiple of 2 of elements are : "; for_each(arr, arr + 5, printx2); cout << endl; // printing array using for_each // using object function cout << "Multiple of 3 of elements are : "; for_each(arr, arr + 5, ob1); cout << endl; // initializing vector vector<int> arr1 = { 4, 5, 8, 3, 1 }; cout << "Using Vectors:" << endl; // printing array using for_each // using function cout << "Multiple of 2 of elements are : "; for_each(arr1.begin(), arr1.end(), printx2); cout << endl; // printing array using for_each // using object function cout << "Multiple of 3 of elements are : "; for_each(arr1.begin(), arr1.end(), ob1); cout << endl; }
Using Arrays: Multiple of 2 of elements are : 2 10 4 8 6 Multiple of 3 of elements are : 3 15 6 12 9 Using Vectors: Multiple of 2 of elements are : 8 10 16 6 2 Multiple of 3 of elements are : 12 15 24 9 3
Excepciones y for_each:
En los casos de excepciones, si la función arroja una excepción o si alguna de las operaciones en los iteradores arroja una excepción, el bucle for_each también arrojará una excepción y romperá/terminará el bucle.
Nota:
- Los argumentos no válidos pueden conducir a un comportamiento indefinido .
- For_each no puede funcionar con punteros de una array (un puntero de array no conoce su tamaño, los bucles for_each no funcionarán con arrays sin conocer el tamaño de una array)
CPP
// C++ code to demonstrate the working // of for_each with Exception #include<iostream> #include<vector> #include<algorithm> using namespace std; // Helper function 1 void printx2(int a) { cout << a * 2 << " "; if ( a % 2 == 0) { throw a; } } // Helper function 2 // object type function struct Class2 { void operator() (int a) { cout << a * 3 << " "; if ( a % 2 == 0) { throw a; } } } ob1; int main() { // Initializing array int arr[5] = { 1, 5, 2, 4, 3 }; cout << "Using Array" << endl; // Printing Exception using for_each // using function try { for_each(arr, arr + 5, printx2); } catch(int i) { cout << "\nThe Exception element is : " << i ; } cout << endl; // Printing Exception using for_each // using object function try { for_each(arr, arr + 5, ob1); } catch(int i) { cout << "\nThe Exception element is : " << i ; } // Initializing vector vector<int> arr1 = { 1, 3, 6, 5, 1 }; cout << "\nUsing Vector" << endl; // Printing Exception using for_each // using function try { for_each(arr1.begin(), arr1.end(), printx2); } catch(int i) { cout << "\nThe Exception element is : " << i ; } cout << endl; // printing Exception using for_each // using object function try { for_each(arr1.begin(), arr1.end(), ob1); } catch(int i) { cout << "\nThe Exception element is : " << i ; } }
Using Array 2 10 4 The Exception element is : 2 3 15 6 The Exception element is : 2 Using Vector 2 6 12 The Exception element is : 6 3 9 18 The Exception element is : 6
Usando lambdas:
Con la introducción de funciones lambda, esto se puede usar fácilmente para hacer que todo esté en línea, lo cual es muy compacto y útil para las personas que buscan usar programación funcional.
C++
#include <bits/stdc++.h> #include <iostream> using namespace std; int main() { vector<int> vec{ 1, 2, 3, 4, 5 }; // this increases all the values in the vector by 1; for_each(vec.begin(), vec.end(), [](int& a) { a++; }); // this prints all the values in the vector; for_each(vec.begin(), vec.end(), [](int a) { cout << a << " " << endl; }); return 0; }
2 3 4 5 6
Este artículo es una contribución de Astha Tyagi . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA