El bucle Foreach se utiliza para iterar sobre los elementos de un contenedor (array, vectores, etc.) rápidamente sin realizar la inicialización, la prueba y el incremento/decremento. El funcionamiento de los bucles foreach es hacer algo para cada elemento en lugar de hacer algo n veces. No hay un bucle foreach en C, pero tanto C++ como Java tienen soporte para el tipo de bucle foreach. En C++, se introdujo en C++ 11 y Java en JDK 1.5.0. La palabra clave utilizada para el bucle foreach es » for » tanto en C++ como en Java.
Sintaxis:
for (tipo_datos nombre_variable: tipo_contenedor) {
operaciones usando variable_name
}
Con la introducción de la palabra clave auto en C++ y la palabra clave var en Java , ya no necesitamos especificar el tipo de datos para la variable en el bucle foreach. La inferencia de tipos detecta el tipo de datos del contenedor y establece automáticamente el mismo tipo de datos en la variable utilizada para atravesar.
El siguiente código muestra el caso de uso del bucle foreach para diferentes contenedores junto con las palabras clave auto/var en C++/Java .
Programa C++/Java para array:
C++
// C++ program to demonstrate use of foreach for array #include <iostream> using namespace std; int main() { int arr[] = { 10, 20, 30, 40 }; // Printing elements of an array using // foreach loop // Here, int is the data type, x is the variable name // and arr is the array for which we want to iterate foreach cout<<"Traversing the array with foreach using array's data type: "; for (int x : arr) cout<<x<<" "; // data type of x is set as int cout<<"\nTraversing the array with foreach using auto keyword : "; for (auto x : arr) cout<<x<<" "; }
Java
// Java program to demonstrate use of foreach public class Main { public static void main(String[] args) { // Declaring 1-D array with size 4 int arr[] = { 10, 20, 30, 40 }; // Printing elements of an array using // foreach loop // Here, int is the data type, x is the variable name // and arr is the array for which we want to iterate foreach System.out.print("Traversing the array with foreach using array's data type: "); for (int x : arr) System.out.print(x+" "); // data type of x is set as int System.out.print("\nTraversing the array with foreach using auto keyword : "); for (var x : arr) System.out.print(x+" "); } }
Traversing the array with foreach using array's data type: 10 20 30 40 Traversing the array with foreach using auto keyword : 10 20 30 40
Programa en C++ para vectores:
C++
#include <iostream> #include <vector> using namespace std; int main() { vector<string> value{"This", "is", "foreach", "example", "using", "vector."}; cout<<"Traversing the vector with foreach using vector's data type: "; for (string v : value) { cout<<v<<" "; } cout<<"\nTraversing the vector with foreach using auto keyword : "; for (auto v : value) cout<<v<<" "; return 0; }
Traversing the vector with foreach using vector's data type: This is foreach example using vector. Traversing the vector with foreach using auto keyword : This is foreach example using vector.
Programa C++/Java para el conjunto:
C++
#include <iostream> #include <set> using namespace std; int main() { set<int> value = {6, 2, 7, 4, 10, 5, 1}; cout<<"Traversing the set with foreach using set's data type: "; for (int v : value) { cout<<v<<" "; } cout<<"\nTraversing the set with foreach using auto keyword : "; for (auto v : value) cout<<v<<" "; return 0; }
Java
import java.util.*; public class GFG { public static void main(String[] args) { Set<String> hash_Set = new HashSet<String>(); hash_Set.add("Geeks"); hash_Set.add("For"); hash_Set.add("Geeks"); hash_Set.add("Foreach"); hash_Set.add("Example"); hash_Set.add("Set"); System.out.print("Traversing the set with foreach using set's data type: "); for(String hs : hash_Set) { System.out.print(hs+" "); } System.out.print("\nTraversing the set with foreach using auto keyword : "); for (var hs : hash_Set) { System.out.print(hs+" "); } } }
Traversing the set with foreach using set's data type: 1 2 4 5 6 7 10 Traversing the set with foreach using auto keyword : 1 2 4 5 6 7 10
Nota: podemos usar diferentes tipos de datos en foreach para array, vector y conjunto.
Programa C++/Java para el mapa:
C++14
#include <iostream> #include <map> using namespace std; int main() { map<int, string> mapExample; mapExample.insert(pair<int, string>(1, "Geeks")); mapExample.insert(pair<int, string>(2, "4")); mapExample.insert(pair<int, string>(3, "Geeks")); mapExample.insert(pair<int, string>(4, "Map")); mapExample.insert(pair<int, string>(5, "Foreach")); mapExample.insert(pair<int, string>(6, "Example")); cout<<"Traversing the map with foreach using map's data type\n"; for (pair<int, string> mpEx : mapExample ) { cout<<mpEx.first<<" "<<mpEx.second<<endl; } cout<<"\nTraversing the map with foreach using auto keyword\n"; for (auto mpEx : mapExample){ cout<<mpEx.first<<" "<<mpEx.second<<endl; } return 0; }
Java
import java.io.*; import java.util.Map; import java.util.HashMap; class GFG { public static void main (String[] args) { Map<Integer,String> gfg = new HashMap<Integer,String>(); gfg.put(1, "Geeks"); gfg.put(2, "4"); gfg.put(3, "Geeks"); gfg.put(4, "Map"); gfg.put(5, "Foreach"); gfg.put(6, "Example"); System.out.println("Traversing the map with foreach using map's data type"); for (Map.Entry<Integer, String> entry : gfg.entrySet()) System.out.println(entry.getKey() + " " + entry.getValue()); System.out.println("\nTraversing the map with foreach using auto keyword"); for (var entry : gfg.entrySet()) System.out.println(entry.getKey() + " " + entry.getValue()); } }
Traversing the map with foreach using map's data type 1 Geeks 2 4 3 Geeks 4 Map 5 Foreach 6 Example Traversing the map with foreach using auto keyword 1 Geeks 2 4 3 Geeks 4 Map 5 Foreach 6 Example
Ventajas del bucle foreach:
- Hace que el código sea más legible.
- Elimina los errores de exceso o falta de datos.
Desventaja del bucle foreach:
- No se puede iterar sobre los elementos en orden inverso.
- Se accederá a todos y cada uno de los elementos, no se puede omitir ningún elemento intermedio.
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