रेंज-आधारित फॉर लूप C++ 11 मानक में जोड़ा गया है और इसका पारंपरिक समकक्ष का अधिक कॉम्पैक्ट रूप है। रेंज-आधारित फॉर लूप का उपयोग किसी कंटेनर के तत्वों पर शुरुआत से अंत तक पुनरावृति करने के लिए किया जाता है। रेंज-आधारित फॉर लूप का सिंटैक्स इस प्रकार है -
सिंटैक्स
for( range-declaration : range-expression ) loop statement
range-declaration - यह range-expression के तत्वों के प्रकार के समान प्रकार के चर की घोषणा है। अक्सर range-expression में तत्वों के प्रकार को स्वचालित रूप से पहचानने के लिए auto कीवर्ड का उपयोग किया जाता है।
range-expression - तत्वों के अनुक्रम को दर्शाने के लिए उपयोग किया जाने वाला कोई भी व्यंजक। ब्रेसेस में तत्वों के अनुक्रम का भी उपयोग किया जा सकता है।
loop-statement - फॉर लूप का मुख्य भाग जिसमें एक या अधिक कथन होते हैं जो range-expression के अंत तक बार-बार निष्पादित होते हैं।
पारंपरिक for loop के साथ तुलना -
// सरणी पर पुनरावृति int arr[] = { 10,20,30,40,50 }; for (int num : arr) printf("%d, ",num); इसके समान है: for ( int i=0;i<5;i++ ) printf("%d, ",arr[i]);
यहां कोई आसानी से देख सकता है कि रेंज-आधारित फॉर लूप में सरणी का आकार गणना करने की कोई आवश्यकता नहीं है इसलिए कोई सशर्त अभिव्यक्ति आवश्यक नहीं है। साथ ही, इंक्रीमेंट या डिक्रीमेंट ऑपरेशन की कोई आवश्यकता नहीं है। उपरोक्त रेंज-आधारित फॉर लूप में num प्रत्येक पुनरावृत्ति के लिए सरणी arr[] के तत्व का मान शुरुआत से अंत तक लेता है। कोई तत्व तब तक नहीं छोड़े जाते जब तक कि जंप स्टेटमेंट में से एक निष्पादित नहीं होता।
Break - शेष सभी पुनरावृत्तियों के लिए लूप समाप्त करता है।
Continue - वर्तमान पुनरावृत्ति को छोड़ता है और अगली पर जाता है।
goto - लेबल के बाद आने वाले कथन पर कूदता है -
रेंज-आधारित फॉर के लाभ
उपयोग में आसान और सरल सिंटैक्स।
कंटेनर में तत्वों की संख्या या range-expression के आकार की गणना करने की आवश्यकता नहीं।
यदि range-declaration का डेटा प्रकार ज्ञात नहीं है तो उसके स्थान पर auto स्पेसिफायर का उपयोग किया जा सकता है, जो स्वचालित रूप से इसे range-expression के प्रकार के साथ संगत बनाता है।
कोई सशर्त कथन या इंक्रीमेंट/डिक्रीमेंट कथन आवश्यक नहीं।
पूरे कंटेनर को एक बार में पुनरावृति करने के मामले में सर्वश्रेष्ठ।
रेंज-आधारित फॉर के नुकसान
begin() और end() के बीच हर तत्व पर पुनरावृति करता है। विशिष्ट सूचकांकों का इलाज नहीं किया जा सकता।
एक या अधिक तत्वों को फिर से देखना और तत्वों के समूह को छोड़ना रेंज-आधारित फॉर लूप का उपयोग करके नहीं किया जा सकता।
सरणी को उल्टे क्रम में पुनरावृति नहीं किया जा सकता। इसके लिए
लाइब्रेरी का उपयोग किया जाता है।
उदाहरण
#include <iostream> #include <vector> #include <map> int main(){ int arr[] = { 10,20,30,40,50 }; // पारंपरिक फॉर for ( int i=0;i<5;i++ ) printf("%d, ",arr[i]); printf("\n"); for (int num : arr) printf("%d, ",num); printf("\n"); // कैरेक्टर सरणी के लिए char str[] = "Hello World"; for (char c : str) printf("%c ",c); printf("\n"); for (char c : "Hello World") printf("%c ",c); printf("\n"); std::map <int, char> MAP({{1, 'A'}, {2, 'B'}, {3, 'C'}}); for (auto m : MAP) printf("{ %d, %c }", m.first,m.second); }
आउटपुट
10, 20, 30, 40, 50, 10, 20, 30, 40, 50, H e l l o W o r l d H e l l o W o r l d { 1, A }{ 2, B }{ 3, C }