Pętla foreach służy do szybkiej iteracji po elementach kontenera (tablica, wektory itp.) bez wykonywania inicjalizacji, testowania lub zwiększania/zmniejszania. Pętle Foreach działają w ten sposób, że wykonują coś dla każdego elementu, zamiast robić coś n razy. Chociaż w C nie ma pętli foreach, jest ona obsługiwana przez C++ i Javę. Po raz pierwszy został wprowadzony w C++ w C++ 11 i w Javie w JDK 1.5.0. Zarówno w C++, jak i w Javie, słowem kluczowym pętli foreach jest „for”.
Składnia
for (data_type variable_name : container_type) { operations using variable_name }
Nie musimy już określać typu danych dla zmiennych w pętlach foreach dzięki wprowadzeniu słowa kluczowego auto w C++ i słowa kluczowego var w Javie. Wnioskowanie o typie wykrywa typ danych kontenera i ustawia zmienną używaną do przechodzenia na ten sam typ danych.
Poniższy kod demonstruje użycie pętli foreach dla różnych kontenerów, a także słów kluczowych auto/var w C++/Java.
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<<x<<' type of is set as int cout<<' traversing auto keyword (auto } < pre> <h3>JAVA</h3> <pre> // 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+' '); } } </pre> <p> <strong>Output</strong> </p> <pre> 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 </pre> <h3>Vector C++ programme:</h3> <pre> #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 auto keyword (auto return 0; < pre> <p> <strong>Output</strong> </p> <pre> 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. </pre> <h2>C++/Java Set Program:</h2> <h3>C++</h3> <pre> #include #include using namespace std; int main() { set 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<<' traversing auto keyword (auto return 0; < pre> <h3>JAVA</h3> <pre> 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+' '); } } } </pre> <p> <strong>Output</strong> </p> <pre> 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 </pre> <p>For array, vector, and set, we can use different data types in foreach.</p> <h2>C++/Java Map Program:</h2> <h3>C++</h3> <pre> #include #include using namespace std; int main() { map mapExample; mapExample.insert(pair(1, 'Geeks')); mapExample.insert(pair(2, '4')); mapExample.insert(pair(3, 'Geeks')); mapExample.insert(pair(4, 'Map')); mapExample.insert(pair(5, 'Foreach')); mapExample.insert(pair(6, 'Example')); cout<<'traversing the map with foreach using map's data type '; for (pair mpex : mapexample ) { cout<<mpex.first<<' '<<mpex.second<<endl; } cout<<' traversing auto keyword '; (auto mapexample){ return 0; < pre> <h3>JAVA</h3> <pre> 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()); } } </pre> <p> <strong>Output</strong> </p> <pre> 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 </pre> <h3>Foreach loop has the following advantages:</h3> <ul> <li>This improves the readability of the code.</li> <li>Removes the possibility of data over- or under-running errors.</li> </ul> <h3>Foreach loop has the following disadvantage:</h3> <ul> <li>It is not possible to iterate over the elements in reverse order.</li> <li>Every element will be accessed; no elements in between will be skipped.</li> </ul> <hr></'traversing></pre></'traversing></pre></'traversing></pre></'traversing>
Wyjście
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 Vector C++:
#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 auto keyword (auto return 0; < pre> <p> <strong>Output</strong> </p> <pre> 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. </pre> <h2>C++/Java Set Program:</h2> <h3>C++</h3> <pre> #include #include using namespace std; int main() { set 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<<\' traversing auto keyword (auto return 0; < pre> <h3>JAVA</h3> <pre> 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+' '); } } } </pre> <p> <strong>Output</strong> </p> <pre> 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 </pre> <p>For array, vector, and set, we can use different data types in foreach.</p> <h2>C++/Java Map Program:</h2> <h3>C++</h3> <pre> #include #include using namespace std; int main() { map mapExample; mapExample.insert(pair(1, 'Geeks')); mapExample.insert(pair(2, '4')); mapExample.insert(pair(3, 'Geeks')); mapExample.insert(pair(4, 'Map')); mapExample.insert(pair(5, 'Foreach')); mapExample.insert(pair(6, 'Example')); cout<<\'traversing the map with foreach using map\'s data type \'; for (pair mpex : mapexample ) { cout<<mpex.first<<\' \'<<mpex.second<<endl; } cout<<\' traversing auto keyword \'; (auto mapexample){ return 0; < pre> <h3>JAVA</h3> <pre> 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()); } } </pre> <p> <strong>Output</strong> </p> <pre> 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 </pre> <h3>Foreach loop has the following advantages:</h3> <ul> <li>This improves the readability of the code.</li> <li>Removes the possibility of data over- or under-running errors.</li> </ul> <h3>Foreach loop has the following disadvantage:</h3> <ul> <li>It is not possible to iterate over the elements in reverse order.</li> <li>Every element will be accessed; no elements in between will be skipped.</li> </ul> <hr></\'traversing></pre></\'traversing></pre></\'traversing>
Program zestawu C++/Java:
C++
#include #include using namespace std; int main() { set 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<<\' traversing auto keyword (auto return 0; < pre> <h3>JAVA</h3> <pre> 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+' '); } } } </pre> <p> <strong>Output</strong> </p> <pre> 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 </pre> <p>For array, vector, and set, we can use different data types in foreach.</p> <h2>C++/Java Map Program:</h2> <h3>C++</h3> <pre> #include #include using namespace std; int main() { map mapExample; mapExample.insert(pair(1, 'Geeks')); mapExample.insert(pair(2, '4')); mapExample.insert(pair(3, 'Geeks')); mapExample.insert(pair(4, 'Map')); mapExample.insert(pair(5, 'Foreach')); mapExample.insert(pair(6, 'Example')); cout<<\'traversing the map with foreach using map\'s data type \'; for (pair mpex : mapexample ) { cout<<mpex.first<<\' \'<<mpex.second<<endl; } cout<<\' traversing auto keyword \'; (auto mapexample){ return 0; < pre> <h3>JAVA</h3> <pre> 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()); } } </pre> <p> <strong>Output</strong> </p> <pre> 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 </pre> <h3>Foreach loop has the following advantages:</h3> <ul> <li>This improves the readability of the code.</li> <li>Removes the possibility of data over- or under-running errors.</li> </ul> <h3>Foreach loop has the following disadvantage:</h3> <ul> <li>It is not possible to iterate over the elements in reverse order.</li> <li>Every element will be accessed; no elements in between will be skipped.</li> </ul> <hr></\'traversing></pre></\'traversing>
Wyjście
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
W przypadku tablic, wektorów i zestawów możemy używać różnych typów danych w foreach.
Program mapujący C++/Java:
C++
#include #include using namespace std; int main() { map mapExample; mapExample.insert(pair(1, 'Geeks')); mapExample.insert(pair(2, '4')); mapExample.insert(pair(3, 'Geeks')); mapExample.insert(pair(4, 'Map')); mapExample.insert(pair(5, 'Foreach')); mapExample.insert(pair(6, 'Example')); cout<<\\'traversing the map with foreach using map\\'s data type \\'; for (pair mpex : mapexample ) { cout<<mpex.first<<\\' \\'<<mpex.second<<endl; } cout<<\\' traversing auto keyword \\'; (auto mapexample){ return 0; < pre> <h3>JAVA</h3> <pre> 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()); } } </pre> <p> <strong>Output</strong> </p> <pre> 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 </pre> <h3>Foreach loop has the following advantages:</h3> <ul> <li>This improves the readability of the code.</li> <li>Removes the possibility of data over- or under-running errors.</li> </ul> <h3>Foreach loop has the following disadvantage:</h3> <ul> <li>It is not possible to iterate over the elements in reverse order.</li> <li>Every element will be accessed; no elements in between will be skipped.</li> </ul> <hr></\\'traversing>
Wyjście
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
Pętla Foreach ma następujące zalety:
- Poprawia to czytelność kodu.
- Eliminuje możliwość wystąpienia błędów związanych z przepełnieniem lub niedopełnieniem danych.
Pętla Foreach ma następującą wadę:
- Nie jest możliwe iterowanie po elementach w odwrotnej kolejności.
- Dostęp do każdego elementu będzie możliwy; żadne elementy pomiędzy nimi nie zostaną pominięte.
\\'traversing>\'traversing>\'traversing>'traversing>