Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में इटरेटर इनवैलिडेशन

C++ में, हमारे पास vector, list, set, map आदि जैसे विभिन्न कंटेनर हैं। इन कंटेनर्स के माध्यम से पुनरावृति करने के लिए, हम इटरेटर्स का उपयोग कर सकते हैं। हमें 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); // वेक्टर पर पुनरावृति करते समय एक नया मान डालना
    for (auto it = vec.begin(); it != vec.end(); it++)
        cout << (*it) << " ";
    return 0;
}

आउटपुट

11 55 110 155 220 89 89

इस प्रोग्राम में हमें विभिन्न प्रकार के परिणाम मिल सकते हैं। यहां वेक्टर का आकार पहले से परिभाषित नहीं है। इनिशियलाइज़ेशन के लिए कुछ मान प्रदान किए गए हैं। अब पुनरावृति करते समय, हम एक और मान जोड़ रहे हैं। इस मामले में, यदि वेक्टर के पास कोई स्थान नहीं है, तो यह रनटाइम पर एक नया मेमोरी ब्लॉक बनाएगा, और सभी आइटम कॉपी हो जाएंगे। लेकिन इटरेटर पिछले पते पर इशारा करेगा। इसके लिए यह कुछ अमान्यता उत्पन्न कर सकता है।

आइए इटरेटर अमान्यता के कुछ नियम देखते हैं।

इन्सर्शन इरेज़र रिसाइज़िंग
Vector इन्सर्शन पॉइंट से पहले इशारा करने वाले सभी इटरेटर्स अप्रभावित हैं, लेकिन अन्य अमान्य हो जाते हैं। और यदि वेक्टर का आकार बढ़ता है, तो सभी इटरेटर्स अमान्य हो जाते हैं। डिलीशन पॉइंट के बाद के सभी इटरेटर्स और रेफरेंस अमान्य हो जाते हैं। इन्सर्ट या इरेज़ के समान।
Deque यदि डाला गया आइटम डेक के अंत में नहीं डाला गया है, तो सभी इटरेटर्स और रेफरेंस अमान्य हो जाते हैं। यदि आइटम्स को अंत की स्थिति को छोड़कर किसी भी स्थिति से हटाया जाता है, तो सभी इटरेटर्स अमान्य हो जाएंगे। इन्सर्ट या इरेज़ के समान।
List सभी इटरेटर्स और रेफरेंस अप्रभावित केवल वे इटरेटर्स या रेफरेंस प्रभावित होते हैं जो उस एलिमेंट की ओर इशारा कर रहे हैं जिसे मिटाया जाएगा। इन्सर्ट या इरेज़ के समान।
Set, map, multiset, multimap सभी इटरेटर्स और रेफरेंस अप्रभावित केवल वे इटरेटर्स या रेफरेंस प्रभावित होते हैं जो उस एलिमेंट की ओर इशारा कर रहे हैं जिसे मिटाया जाएगा। ----
  1. C++ में बाइनरी सर्च ट्री इटरेटर C++ में बाइनरी सर्च ट्री इटरेटर

    मान लीजिए हम बाइनरी ट्री के लिए एक इटरेटर बनाना चाहते हैं। दो मेथड होंगे। अगला एलिमेंट लौटाने के लिए next() मेथड, और बूलियन मान लौटाने के लिए hasNext() मेथड, जो इंगित करेगा कि अगला एलिमेंट मौजूद है या नहीं। तो यदि ट्री इस तरह है −और फंक्शन कॉल्स का अनुक्रम [next(), next(), hasNext(), next(), h

  1. - C++ में आउटपुट इटरेटर्स

    यहां हम देखेंगे कि C++ में आउटपुट इटरेटर्स क्या हैं। आउटपुट इटरेटर्स के कुछ गुण हैं। ये नीचे दिए गए हैं: आउटपुट इटरेटर्स का उपयोग कंटेनर्स के मान को संशोधित करने के लिए किया जाता है। हम इस तरह के इटरेटर्स का उपयोग करके कंटेनर से डेटा नहीं पढ़ सकते। यह वन-वे और राइट-ओनली इटरेटर है।

  1. - C# में इटरेटर्स

    इटरेटर कलेक्शन पर कस्टम इटरेशन करता है। यह yield return स्टेटमेंट का उपयोग करता है और प्रत्येक एलिमेंट को एक समय में लौटाता है। इटरेटर वर्तमान स्थान को याद रखता है और अगले इटरेशन में अगला एलिमेंट लौटाया जाता है।निम्न एक उदाहरण है:उदाहरणusing System; using System.Collections.Generic; using System.Lin