पुनरावृत्ति करते समय 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