يتم استخدام حلقة foreach للتكرار بسرعة على عناصر الحاوية (المصفوفة والمتجهات وما إلى ذلك) دون إجراء التهيئة أو الاختبار أو الزيادة/النقصان. تعمل حلقات Foreach عن طريق القيام بشيء ما لكل عنصر بدلاً من القيام بشيء ما n مرات. على الرغم من عدم وجود حلقة foreach في لغة C، إلا أنها مدعومة من قبل C++ وJava. تم تقديمه لأول مرة في C++ في C++ 11، وفي Java في JDK 1.5.0. في كل من C++ وJava، الكلمة الأساسية لحلقة foreach هي 'for'.
بناء الجملة
for (data_type variable_name : container_type) { operations using variable_name }
لم نعد بحاجة إلى تحديد نوع البيانات للمتغيرات في حلقات foreach بفضل إدخال الكلمة الأساسية auto في لغة C++ والكلمة الأساسية var في Java. يكتشف استنتاج النوع نوع بيانات الحاوية ويعين المتغير المستخدم للعبور إلى نفس نوع البيانات.
يوضح الكود أدناه استخدام حلقة foreach للحاويات المختلفة، بالإضافة إلى الكلمات الرئيسية auto/var في C++/Java.
سي ++
// 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>
انتاج |
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
برنامج فيكتور سي++:
#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>
برنامج مجموعة C++/Java:
سي ++
#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>
انتاج |
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
بالنسبة للصفيف والمتجه والمجموعة، يمكننا استخدام أنواع مختلفة من البيانات في foreach.
برنامج خرائط جافا/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>
انتاج |
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
تتميز حلقة Foreach بالمزايا التالية:
- يؤدي هذا إلى تحسين إمكانية قراءة التعليمات البرمجية.
- يزيل احتمالية حدوث أخطاء زائدة أو ناقصة في تشغيل البيانات.
حلقة Foreach لها العيب التالي:
- لا يمكن التكرار على العناصر بترتيب عكسي.
- سيتم الوصول إلى كل عنصر. لن يتم تخطي أي عناصر بينهما.
\\'traversing>\'traversing>\'traversing>'traversing>