iterators stl
एसटीएल में Iterators का एक पूरा अवलोकन।
इस ट्यूटोरियल में, हम पुनरावृत्तियों, उनके प्रकारों, लाभों और उनके द्वारा समर्थित विभिन्न कार्यों का विवरण देखेंगे।
agile scrum कार्यप्रणाली साक्षात्कार सवाल जवाब
Iterator क्या है? सामान्य तौर पर, एक इटरेटर किसी भी वस्तु की तरह होता है जो किसी विशेष तत्व को एक सरणी या कंटेनर जैसे डेटा की श्रेणी में इंगित करता है। सी में एक सूचक की तरह एक पुनरावृत्त होता है।
=> संपूर्ण सी ++ प्रशिक्षण श्रृंखला यहां देखें।
आप क्या सीखेंगे:
अवलोकन
एसटीएल में, एक एटरेटर एक ऐसी वस्तु है जिसका उपयोग कंटेनर में तत्वों के माध्यम से आगे बढ़ने के लिए किया जा सकता है या संचालक ऑपरेटर (++) या डीरेफेरेंस ऑपरेटर (*) जैसे ऑपरेटरों के सेट का उपयोग करके किया जा सकता है।
एसटीएल प्रोग्रामिंग में Iterators महत्वपूर्ण हैं क्योंकि वे कंटेनरों के अंदर संग्रहीत डेटा तक पहुंचने और हेरफेर करने के अलावा कंटेनर में एल्गोरिदम को जोड़ने में महत्वपूर्ण भूमिका निभाते हैं।
Iterators के प्रकार
पुनरावृत्तियों द्वारा कार्यान्वित कार्यक्षमता के आधार पर, उन्हें निम्नानुसार वर्गीकृत किया जाता है:
- इनपुट और आउटपुट Iterators : ये पुनरावृत्तियों के सबसे सरल प्रकार हैं। वे एकल-पास वाले अनुक्रमिक इनपुट-आउटपुट संचालन में सबसे उपयोगी हैं।
- फॉरवर्ड इटरेटर्स : ये इनपुट पुनरावृत्तियों की तरह ही होते हैं लेकिन एक दिशा होती है अर्थात् आगे की दिशा इस अर्थ में होती है कि उनका उपयोग अग्रेषण दिशा में एक सीमा के माध्यम से पार करने के लिए किया जा सकता है। जब आगे चलने वाले निरंतर नहीं होते हैं तो उनका उपयोग आउटपुट पुनरावृत्तियों के रूप में भी किया जा सकता है। अधिकांश मानक एसटीएल कंटेनर कम से कम आगे चलने वालों का समर्थन करते हैं।
- द्विदिश Iterators : ये एकमात्र अंतर के साथ आगे चलने वाले पुनरावृत्तियों के समान हैं जो वे द्विदिश हैं। इसका मतलब है कि हम इन द्विदिश पुनरावृत्तियों का उपयोग आगे और पीछे की दिशा में सीमा के माध्यम से पार करने के लिए कर सकते हैं।
- रैंडम एक्सेस Iterators : रैंडम एक्सेस पुनरावृत्तियां सभी पुनरावृत्तियों में सबसे शक्तिशाली हैं। ये गैर-अनुक्रमिक पुनरावृत्त हैं। रैंडम-एक्सेस पुनरावृत्तियां हमें प्रत्येक तत्व को क्रमिक रूप से गुजरने के बिना वर्तमान मूल्य पर ऑफसेट लागू करके किसी भी यादृच्छिक मूल्य तक पहुंचने की अनुमति देती हैं। वे सी में पॉइंटर्स जैसी समान गुणों का प्रदर्शन करते हैं।
एक बात का ध्यान रखें कि सभी एसटीएल कंटेनर सभी पुनरावृत्तियों का समर्थन नहीं करते हैं। विभिन्न कंटेनर अपनी कार्यक्षमता की आवश्यकता के आधार पर विभिन्न पुनरावृत्तियों का समर्थन करते हैं।
नीचे विभिन्न पुनरावृत्तियों का उपयोग करने वाले कंटेनरों की सूची दी गई है:
कंटेनरों | Iterators |
---|---|
नक्शा | द्विदिश |
ढेर | कोई यात्रा करनेवाला नहीं |
पंक्ति | कोई यात्रा करनेवाला नहीं |
प्राथमिकता कतार | कोई यात्रा करनेवाला नहीं |
सूची | द्विदिश |
वेक्टर | रैंडम एक्सेस |
तथा | रैंडम एक्सेस |
मल्टीमैप | द्विदिश |
सेट | द्विदिश |
मल्टीसेट | द्विदिश |
Iterators के लाभ
विशेष रूप से विभिन्न रेंज और कंटेनरों का उपयोग करते हुए आईटरेटर अत्यंत उपयोगी होते हैं।
प्रोग्रामिंग में पुनरावृत्तियों का उपयोग करने के कुछ लाभों को नीचे संक्षेप में प्रस्तुत किया जा सकता है:
(1) कोड पुन: प्रयोज्य
जब तक हम अपने प्रोग्राम में तत्वों को एक्सेस करने के लिए पुनरावृत्तियों का उपयोग करते हैं, तब तक हम अपनी पुनरावृत्ति परिभाषा में कंटेनर का नाम बदल सकते हैं और जब भी हमें कंटेनर को बदलने की आवश्यकता होती है, तो बाकी कोड का उपयोग इसी तरह से करते हैं।
यह उन परिदृश्यों में विशेष रूप से उपयोगी है जहां हम एक सूची कंटेनर का उपयोग करके एक वेक्टर कंटेनर को बदलने की योजना बनाते हैं। यदि पुनरावृत्तियों के स्थान पर हम () ऑपरेटर का उपयोग कर रहे थे, तो जब हम कंटेनर बदलते हैं तो तत्वों तक पहुंचने के लिए कोड बेकार होगा।
# 2) प्रोग्रामिंग की आसानी और सुविधा
Iterators विभिन्न निर्मित कार्यों के साथ आते हैं जो हमें कंटेनर की सामग्री को आसानी से और आसानी से ट्रैवर्स करने और एक्सेस करने में सहायता करते हैं।
उदाहरण के लिए , हमें () ऑपरेटरों का उपयोग करते समय सूची या सरणी के अंत की जाँच करते रहने की आवश्यकता नहीं है, जैसे कि हमें तत्वों को जोड़ना चाहते हैं, और हमें उन्हें लूप के लिए बदलने की आवश्यकता है। ।
पुनरावृत्तियों का उपयोग करते समय हम सीधे शुरू () और अंत तक पहुँच सकते हैं (पुनरावृत्तियाँ) फ़ंक्शन के बिना जब हम सूची के अंत तक पहुँचते हैं तो एक टैब रखने के लिए और साथ ही हमें उन्हें लूप के लिए बदलने की आवश्यकता नहीं है।
# 3) डायनामिक जोड़ें / निकालें
पुनरावृत्तियों का उपयोग करते समय हम आसानी से और गतिशील रूप से कंटेनर में तत्वों को जोड़ या हटा सकते हैं बिना तत्वों को स्थानांतरित किए बिना जैसे हमें () ऑपरेटरों में करना है।
निम्न उदाहरण के साथ इसे प्रदर्शित करते हैं:
#include #include using namespace std; int main() { vector vec1 = { 1, 1, 2 }; // Declaring an iterator vector::iterator i; // Inserting element for (i = vec1.begin(); i != vec1.end(); ++i) { if (i == vec1.begin()) { i = vec1.insert(i, 3); // insert 3 at the beginning of vec1 } } // contents of vec1 3 1 1 2 cout<<'Vector contents after addition'; cout< आउटपुट:
वेक्टर सामग्री इसके अलावा
३ १ १ २
विलोपन के बाद वेक्टर सामग्री
३ १ २
जैसा कि उपरोक्त उदाहरण में देखा गया है, हम देखते हैं कि पुनरावृत्तियों का उपयोग करके हम आसानी से कंटेनर को स्थानांतरित करने वाले तत्वों (इस मामले में वेक्टर) को जोड़ या हटा सकते हैं, बिना स्थानांतरण तत्वों के जटिल प्रोग्रामिंग का सहारा लेने और कंटेनर के पुनर्गठन के बिना।
Iterator कार्य
जैसा कि पुनरावृत्तियां स्वयं अंतर्निहित निर्माण हैं, वे विभिन्न कार्यों का समर्थन करते हैं जो पुनरावृत्त वस्तुओं पर किए जा सकते हैं। ये ऑपरेशन / फ़ंक्शन हमें सीमा के माध्यम से कुशलता से पार करने की अनुमति देते हैं और कंटेनर के अंदर तत्वों को भी हेरफेर करते हैं।
अब हम कुछ बड़े ऑपरेशन देखेंगे जो पुनरावृत्तियों का समर्थन करते हैं।
- शुरू: पुनरावृत्ति की पहली या प्रारंभिक स्थिति देता है।
- समाप्त: अंतिम स्थिति या ‘अंत के बाद 'पुनरावृत्ति की स्थिति में लौटाता है।
- प्रचलित: तर्क में दिए गए पदों की संख्या को घटाने के बाद नया पुनरावृत्त लौटाता है।
- अगला: तर्क में दिए गए पदों की संख्या को बढ़ाने या बढ़ाने के बाद नया पुनरावृत्ति करता है।
- आवेषण: एक कंटेनर में किसी भी स्थिति में तत्व सम्मिलित करता है।
- अग्रिम: तर्क में दिए गए निर्दिष्ट संख्या में पुनरावृत्ति स्थिति को बढ़ाता है।
हम निम्नलिखित कार्यक्रम में इस फ़ंक्शन / संचालन में से कुछ का उपयोग प्रदर्शित करेंगे:
#include #include #include using namespace std; int main() { vector v = { 1, 1,2,3,5 }; // declaring iterators to a vector vector::iterator itr1 = v.begin(); vector::iterator itr2 = v.end(); auto it = next(itr1, 2); // displaying iterator position cout << 'Using next() the new iterator is at: '; cout << *it << ' '; cout << endl; auto it1 = prev(itr2, 2); // displaying iterator position cout << 'The position of new iterator using prev() is: '; cout << *it1 << ' '; cout << endl; //advance advance(itr1,3); // displaying iterator position cout << 'After advance operation,itr1 is positioned at: '; cout << *itr1 << ' '; cout << endl; return 0; }
आउटपुट:
अगला () नया पुनरावृत्त का उपयोग कर रहा है: 2
Prev () का उपयोग करके नए पुनरावृत्ति की स्थिति है: 3
अग्रिम ऑपरेशन के बाद, itr1 को 3 पर तैनात किया गया है
उपरोक्त कार्यक्रम का उपयोग करते हुए हमने विभिन्न पुनरावृत्तियों के संचालन का उपयोग किया है।
निष्कर्ष
इस प्रकार हम Iterators पर इस ट्यूटोरियल के अंत में आ गए हैं।
अब तक हमने एसटीएल की मूल बातों पर चर्चा की है, हमारे अगले ट्यूटोरियल से हम एसटीएल कंटेनरों और उनकी प्रोग्रामिंग के साथ शुरू करेंगे।
=> पूर्ण C ++ मुफ़्त प्रशिक्षण श्रृंखला यहां देखें।
अनुशंसित पाठ
- एसटीएल में प्राथमिकता कतार
- एसटीएल में गिरफ्तारी
- मुफ़्त के लिए C ++ प्रोग्रामिंग सीखने के लिए 70+ BEST C ++ ट्यूटोरियल
- स्ट्रिंग्स, जोड़ी और ट्यूप एसटीएल में
- एसटीएल में सेट करें
- एसटीएल में एल्गोरिदम
- सर्वश्रेष्ठ मुफ्त सी # ट्यूटोरियल श्रृंखला: शुरुआती के लिए अंतिम सी # गाइड
- मानक टेम्पलेट लाइब्रेरी (एसटीएल): एक संक्षिप्त परिचय