सी ++ में, हमारे पास वेक्टर, सूची, सेट, मानचित्र इत्यादि जैसे विभिन्न कंटेनर हैं। इन कंटेनरों के माध्यम से पुनरावृत्त करने के लिए, हम इटरेटर्स का उपयोग कर सकते हैं। जब हम C++ में इटरेटर का उपयोग कर रहे हों तो हमें सावधान रहना चाहिए। जब हम किसी कंटेनर पर पुनरावृत्ति का उपयोग कर रहे हैं, तो कभी-कभी, यह अमान्य हो सकता है। अगर आकार, आकार बदल दिया जाए, तो हम इस तरह की समस्याओं का सामना कर सकते हैं। निम्नलिखित उदाहरण में, हम अमान्यकरण की समस्या की पहचान कर सकते हैं।
उदाहरण कोड
#include <iostream> #include <vector> using namespace std; int main() { vector <int> vec{11, 55, 110, 155, 220}; for (auto it=vec.begin(); it!=vec.end(); it++) if ((*it) == 110) vec.push_back(89); //inserting a new value while iterating the vector for (auto it=vec.begin();it!=vec.end();it++) cout << (*it) << " "; }के लिए वेक्टर को पुनरावृत्त करते हुए एक नया मान डालना
आउटपुट
11 55 110 155 220 89 89
इस कार्यक्रम में हम विभिन्न प्रकार के परिणाम प्राप्त कर सकते हैं। यहाँ सदिश का आकार पहले परिभाषित नहीं किया गया है। आरंभीकरण के लिए कुछ मान दिए गए हैं। अब पुनरावृति करते हुए, हम एक और मूल्य जोड़ रहे हैं। इस मामले में, यदि वेक्टर के पास कोई स्थान नहीं है, तो यह एक नया मेमोरी ब्लॉक एटरनटाइम बनाएगा, और सभी आइटम कॉपी किए जाएंगे। लेकिन इटरेटर को पिछले पते पर इंगित किया जाएगा। इसके लिए यह कुछ अमान्यताएँ उत्पन्न कर सकता है।
आइए हम पुनरावृत्त अमान्यताओं के लिए कुछ नियम देखें।
वें> <वें शैली ="चौड़ाई:40.7483%; पाठ-संरेखण:केंद्र;">सम्मिलन वें> <वें शैली ="पाठ-संरेखण:केंद्र; चौड़ाई:26.7347%;">मिटाएं वें> <वें शैली ="चौड़ाई:12.0408%;"> आकार बदलना वें> | |||
---|---|---|---|
वेक्टर | सभी इटरेटर्स, जो इंसर्शन पॉइंट से पहले किसी तत्व को इंगित कर रहे हैं, अप्रभावित हैं, लेकिन अन्य अमान्य हैं। और यदि वेक्टर का आकार बढ़ा दिया जाता है, तो सभी पुनरावृत्तियों को अमान्य कर दिया जाता है। | सभी पुनरावर्तक, और संदर्भ, जो विलोपन बिंदु के बाद हैं, अमान्य हैं। | सम्मिलित या मिटाने जैसा ही है। |
Deque | सभी पुनरावृत्तियों और संदर्भों को अमान्य कर दिया जाता है यदि सम्मिलित आइटम को डेक के अंत में सम्मिलित नहीं किया जाता है। | यदि अंतिम स्थिति को छोड़कर किसी भी स्थिति से आइटम हटा दिए जाते हैं, तो सभी पुनरावर्तक अमान्य हो जाएंगे। | सम्मिलित या मिटाने जैसा ही है। |
सूची | सभी पुनरावर्तक और संदर्भ अप्रभावित हैं | केवल वे इटरेटर, या संदर्भ, जो उस तत्व की ओर इशारा करते हैं जिसे मिटाया जाएगा, प्रभावित होते हैं। | सम्मिलित या मिटाने जैसा ही है। |
सेट, मैप, मल्टीसेट, मल्टीमैप | सभी पुनरावर्तक और संदर्भ अप्रभावित हैं | केवल वे इटरेटर, या संदर्भ, जो उस तत्व की ओर इशारा करते हैं जिसे मिटाया जाएगा, प्रभावित होते हैं। | ---- |