लूप के लिए आधारित श्रेणी को C++ 11 मानक में जोड़ा गया है और यह इसके पारंपरिक समकक्ष का अधिक कॉम्पैक्ट रूप है। लूप के लिए आधारित श्रेणी का उपयोग कंटेनर के तत्वों पर शुरू से अंत तक पुनरावृति करने के लिए किया जाता है। लूप के लिए रेंज-आधारित सिंटैक्स इस प्रकार है -
सिंटैक्स
for( range-declaration : range-expression ) loop statement
श्रेणी-घोषणा - यह श्रेणी-अभिव्यक्ति के तत्वों के प्रकार के समान प्रकार के एक चर की घोषणा है। श्रेणी-अभिव्यक्ति में तत्वों के प्रकार को स्वचालित रूप से पहचानने के लिए अक्सर ऑटो कीवर्ड का उपयोग किया जाता है।
श्रेणी-अभिव्यक्ति - तत्वों के अनुक्रम का प्रतिनिधित्व करने के लिए प्रयुक्त कोई भी अभिव्यक्ति। साथ ही ब्रेसिज़ में तत्वों के अनुक्रम का उपयोग किया जा सकता है।
लूप-स्टेटमेंट - लूप के लिए बॉडी जिसमें एक या अधिक स्टेटमेंट होते हैं जिन्हें रेंज-एक्सप्रेशन के अंत तक बार-बार निष्पादित किया जाना है।
पारंपरिक लूप के लिए . के साथ तुलना -
// Iterating over array
int arr[] = { 10,20,30,40,50 };
for (int num : arr)
printf("%d, ",num);
Is same as:
for ( int i=0;i<5;i++ )
printf("%d, ",arr[i]); यहां कोई आसानी से देख सकता है कि रेंज-आधारित लूप में सरणी के आकार की गणना करने की कोई आवश्यकता नहीं है, इसलिए किसी सशर्त अभिव्यक्ति की आवश्यकता नहीं है। इसके अलावा, वेतन वृद्धि या वेतन वृद्धि के संचालन की कोई आवश्यकता नहीं है। प्रत्येक पुनरावृत्ति के लिए उपरोक्त लूप के आधार पर श्रेणी में संख्या, शुरुआत से अंत तक सरणी एआर [] से तत्व का मान लेती है। जब तक किसी एक जम्प स्टेटमेंट को निष्पादित नहीं किया जाता है, तब तक कोई भी तत्व नहीं छोड़ा जाता है।
टूटें - बाकी सभी पुनरावृत्तियों के लिए लूप को समाप्त करता है।
जारी रखें - वर्तमान पुनरावृत्ति को छोड़ देता है और अगले पर चला जाता है
गोटो − लूप से निकलकर स्टेटमेंट पर जाता है जिसके बाद लेबल होता है -
के लिए श्रेणी-आधारित के लाभ
-
प्रयोग करने में आसान और सरल वाक्य रचना।
-
कंटेनर में तत्वों की संख्या या श्रेणी-अभिव्यक्ति के आकार की गणना करने की आवश्यकता नहीं है।
-
यदि डेटा प्रकार की श्रेणी-घोषणा ज्ञात नहीं है, तो इसके स्थान पर ऑटो विनिर्देशक का उपयोग किया जा सकता है, जो इसे स्वचालित रूप से श्रेणी-अभिव्यक्ति के प्रकार के साथ संगत बनाता है।
-
कोई सशर्त बयान या वेतन वृद्धि/कमी विवरण की आवश्यकता नहीं है।
-
उस स्थिति में सबसे अच्छा जहां पूरे कंटेनर को एक बार में पुनरावृत्त किया जाना है।
श्रेणी-आधारित के नुकसान
-
प्रारंभ () और अंत () के बीच प्रत्येक तत्व पर पुनरावृति। विशिष्ट अनुक्रमणिका का इलाज नहीं किया जा सकता है।
-
लूप के लिए रेंज-आधारित का उपयोग करके एक या अधिक तत्वों पर दोबारा गौर करना और तत्वों के समूह को छोड़ना नहीं किया जा सकता है।
-
सरणी को उल्टे क्रम में पुनरावृत्त नहीं किया जा सकता है। उसके लिए
लाइब्रेरी का उपयोग किया जाता है
उदाहरण
#include <iostream>
#include <vector>
#include <map>
int main(){
int arr[] = { 10,20,30,40,50 };
// traditional for
for ( int i=0;i<5;i++ )
printf("%d, ",arr[i]);
printf("\n");
for (int num : arr)
printf("%d, ",num);
printf("\n");
// for character array
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 }