Foreach buclă este folosit pentru a itera elementele unui container (matrice, vectori etc.) rapid fără a efectua inițializare, testare și creștere/decrementare. Funcționarea buclelor foreach este de a face ceva pentru fiecare element, mai degrabă decât de a face ceva de n ori. Nu există nicio buclă foreach în C, dar atât C++ cât și Java acceptă tipul de buclă foreach. În C++, a fost introdus în C++ 11 și Java în JDK 1.5.0 Cuvântul cheie folosit pentru bucla foreach este pentru atât în C++ cât și în Java.
Sintaxă:
for (data_type variable_name : container_name) { operations using variable_name }> Odată cu introducerea cuvântului cheie auto în C++ și a cuvântului cheie var în Java, nu mai trebuie să specificăm tipul de date pentru variabila în bucla foreach. Inferența tip detectează tipul de date al containerului și setează automat același tip de date variabilei utilizate pentru parcurgere.
Codul de mai jos afișează cazul de utilizare al buclei foreach pentru diferite containere împreună cu auto/var cuvinte cheie în C++/Java .
Programul C++/Java pentru matrice:
C++
// C++ program to demonstrate use of foreach for array> #include> 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<' '; // data type of x is set as int cout<<'
Traversing the array with foreach using auto keyword : '; for (auto x : arr) cout<' '; }> |
>
>
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(>'
Traversing the array with foreach using auto keyword : '>);> >for> (var x : arr)> >System.out.print(x+>' '>);> >}> }> |
>
>Ieșire
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>
Program C++ pentru vector:
C++
metode java arraylist
#include> #include> using> namespace> std;> int> main()> {> >vector 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 <<>'
Traversing the vector with foreach using '> >'auto keyword : '>;> >for> (>auto> v : value)> >cout << v <<>' '>;> >return> 0;> }> |
>
>
șir de caractere java comparăIeșire
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.>
Program Java pentru ArrayList:
Java
/*package whatever //do not write package name here */> import> java.util.*;> class> GFG {> >public> static> void> main(String[] args)> >{> >ArrayList list =>new> ArrayList();> >list.add(>3>);> >list.add(>24>);> >list.add(->134>);> >list.add(->2>);> >list.add(>100>);> >for> (>int> element : list) {> >System.out.print(element +>' '>);> >}> >}> }> |
>
>Ieșire
3 24 -134 -2 100>
Program C++/Java pentru set:
C++
#include> #include> using> namespace> std;> int> main() {> >set<>int>>valoare = {6, 2, 7, 4, 10, 5, 1};> > >cout<<>'Traversing the set with foreach using set's data type: '>;> >for> (>int> v : value) {> >cout<' '; } cout<<'
Traversing the set with foreach using auto keyword : '; for (auto v : value) cout<' '; return 0; }> |
>
>
Java
import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String[] args)> >{> >Set hash_Set =>new> HashSet();> >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(>'
Traversing the set with foreach using auto keyword : '>);> >for> (var hs : hash_Set) {> >System.out.print(hs+>' '>);> >}> > >}> }> |
>
>Ieșire
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>
Notă: Putem folosi diferite tipuri de date în foreach pentru matrice, vector și set.
Program C++/Java pentru hartă:
C++14
#include> #include> using> namespace> std;> int> main() {> >map<>int>, string>hartaExemplu;> >mapExample.insert(pair<>int>, string>(1,>>>));> >mapExample.insert(pair<>int>, string>(2,>>>));> >mapExample.insert(pair<>int>, string>(3,>>>));> >mapExample.insert(pair<>int>, string>(4,>>>));> >mapExample.insert(pair<>int>, string>(5,>>>));> >mapExample.insert(pair<>int>, string>(6,>>>));> > >cout<<>'Traversing the map with foreach using map's data type
'>;> >for> (pair<>int>, string>mpEx : mapExample ) {> >cout<' '< } cout<<'
Traversing the map with foreach using auto keyword
'; for (auto mpEx : mapExample){ cout<' '< } return 0; }> |
>
>
Java
import> java.io.*;> import> java.util.Map;> import> java.util.HashMap;> class> GFG {> >public> static> void> main (String[] args) {> >Map gfg =>new> HashMap();> > >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 entry : gfg.entrySet())> >System.out.println(entry.getKey() +>' '> + entry.getValue());> > >System.out.println(>'
Traversing the map with foreach using auto keyword'>);> >for> (var entry : gfg.entrySet())> >System.out.println(entry.getKey() +>' '> + entry.getValue());> >}> }> |
>
>Ieșire
1 miliard la milion
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>
Avantajele buclei foreach:
- Face codul mai lizibil.
- Elimină erorile de depășire sau sub rulare a datelor.
Dezavantajul buclei foreach:
- Nu se poate repeta peste elemente în ordine inversă.
- Fiecare element va fi accesat, nu poate sări peste niciun element între ele.