"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पुनरावृत्ति करते समय std::vector से तत्वों को सुरक्षित रूप से कैसे हटाएं?

पुनरावृत्ति करते समय std::vector से तत्वों को सुरक्षित रूप से कैसे हटाएं?

2024-11-14 को प्रकाशित
ब्राउज़ करें:970

How to Safely Remove Elements from a std::vector While Iterating?

पुनरावृत्ति करते समय std::vector से तत्वों को प्रभावी ढंग से हटाना

सी प्रोग्रामिंग के दायरे में, डेवलपर्स को अक्सर एसटीडी में हेरफेर करने की चुनौती का सामना करना पड़ता है ::वेक्टर अपने तत्वों को पार करते समय। जबकि पुनरावर्तक इस कार्य के लिए एक सुविधाजनक तंत्र प्रदान करते हैं, पुनरावृत्ति के दौरान तत्वों को हटाने का प्रयास करते समय एक सामान्य गड़बड़ी उत्पन्न होती है।

उस परिदृश्य पर विचार करें जहां एक सूची को संग्रहीत करने के लिए std::vector<:string> का उपयोग किया जाता है फ़ाइलों के पथ. लक्ष्य प्रत्येक फ़ाइल को हटाना और वेक्टर से उसका पथ हटाना है। हालाँकि, पारंपरिक तरीकों का उपयोग करना, जैसे कि मिटाना () विधि, प्रत्येक विलोपन के बाद पुनरावृत्तियों को अमान्य कर देता है, जिससे आगे का ट्रैवर्सल जटिल हो जाता है।

इस सीमा को पार करने के लिए, डेवलपर्स ने एक अधिक कुशल दृष्टिकोण तैयार किया है। इरेज़() विधि, जब लागू की जाती है, तो न केवल निर्दिष्ट तत्व को हटा देती है बल्कि अगले तत्व की ओर इशारा करते हुए एक नया पुनरावर्तक भी लौटाती है। यह अनोखा व्यवहार लूप को सुचारू रूप से जारी रखने की अनुमति देता है:

std::vector<:string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
    if (::DeleteFile(iter->c_str()))
        iter = m_vPaths.erase(iter);
    else
          iter;
}

इस कोड स्निपेट में, लूप इच्छानुसार जारी रहता है, प्रत्येक विलोपन के बाद अगले वैध तत्व को इंगित करने के लिए इटर स्वचालित रूप से अपडेट किया जाता है। यह कुशल विधि एक अतिरिक्त वेक्टर की आवश्यकता को समाप्त करती है और पुनरावृत्ति करते समय तत्वों को हटाने की प्रक्रिया को सुव्यवस्थित करती है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3