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

C++ प्रोग्राम में इटरेटर इनवैलिडेशन (Iterator Invalidation in C++ program)


इस ट्यूटोरियल में, हम C++ में इटरेटर इनवैलिडेशन को समझने के लिए एक प्रोग्राम पर चर्चा करेंगे।

कंटेनर ऑब्जेक्ट के तत्वों पर पुनरावृति करते समय, कभी-कभी यह अमान्य हो सकता है यदि हम बाउंड चेक लागू नहीं करते हैं। यह मुख्य रूप से कंटेनर ऑब्जेक्ट के आकार और आकृति में परिवर्तन के कारण होता है।

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

int main() { 
    // वेक्टर घोषित करना 
    vector<int> v{1, 5, 10, 15, 20}; 
    
    // निष्पादन के दौरान वेक्टर बदलना 
    // जिससे बाउंड इनवैलिडेशन होगा 
    for (auto it = v.begin(); it != v.end(); it++) 
        if ((*it) == 5) 
            v.push_back(-1); 
    
    for (auto it = v.begin(); it != v.end(); it++) 
        cout << (*it) << " "; 
    return 0; 
}

आउटपुट

1 5 10 15 20 -1 -1

(यह भी हो सकता है कि नए तत्व को जोड़ने के लिए, वेक्टर को एक नए स्थान पर कॉपी किया जाए जहां हमारा इटरेटर अभी भी पुराने की ओर इशारा कर रहा हो जो तब त्रुटि देगा।)

  1. - C++ में वेक्टर को सॉर्ट करना

    C++ में वेक्टर को सॉर्ट करना std::sort() का उपयोग करके किया जा सकता है। यह <algorithm> हेडर में परिभाषित है। एक स्थिर सॉर्ट प्राप्त करने के लिए std::stable_sort का उपयोग किया जाता है। यह बिल्कुल sort() की तरह है लेकिन समान एलिमेंट्स के सापेक्ष क्रम को बनाए रखता है। आवश्यकतानुसार Quicksort(),

  1. - C++ STL में Vector का कार्यान्वयन

    वेक्टर में डायनामिक ऐरे की तरह स्वचालित रूप से आकार बदलने की क्षमता होती है। जब कोई तत्व डाला या हटाया जाता है, तो कंटेनर अपने स्टोरेज को स्वचालित रूप से संभालता है। वेक्टर तत्व सन्निहित स्टोरेज में रखे जाते हैं ताकि उन्हें इटरेटर का उपयोग करके एक्सेस और ट्रैवर्स किया जा सके। डेटा को वेक्टर की शुरुआ

  1. - C++ प्रोग्राम: वेक्टर इम्प्लीमेंटेशन

    एक वेक्टर एक डायनामिक ऐरे है जो एलिमेंट सम्मिलित या डिलीट होने पर खुद को रिसाइज़ कर सकता है। वेक्टर एलिमेंट्स एक सन्निहित स्टोरेज में समाहित होते हैं और कंटेनर स्टोरेज को स्वचालित रूप से हैंडल करता है। उदाहरण val; vec.push_back(val); break; case 2: