std::erase और std::remove के बीच अंतर को समझना
std::remove एल्गोरिथ्म एक बहुमुखी उपकरण है जिसे संचालित करने के लिए डिज़ाइन किया गया है किसी भी फॉरवर्ड इटरेटर जोड़ी पर, इसे कंटेनरों और परिदृश्यों की एक विस्तृत श्रृंखला पर लागू किया जा सकता है। अपने समकक्ष std::erase के विपरीत, जो कंटेनर से तत्वों को प्रभावी ढंग से हटाता है, std::remove केवल तत्वों को पुनर्व्यवस्थित करता है।
1। std::remove
std::remove की बारीकियों को उजागर करना कंटेनर को तार्किक रूप से दो खंडों में विभाजित करके काम करता है: एक खंड जिसमें हटाए जाने वाले तत्व होते हैं और एक खंड जिसमें शेष तत्व होते हैं। यह कंटेनर के माध्यम से पुनरावृत्ति करके और गैर-हटाए गए तत्वों को आगे बढ़ाकर, हटाए गए तत्वों को प्रभावी ढंग से ओवरराइट करके करता है। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि std::remove वास्तव में हटाए गए तत्वों को नहीं मिटाता है; वे स्मृति में रहते हैं लेकिन प्रभावी रूप से दृश्य से छिपे रहते हैं।
कंटेनर आकार() फ़ंक्शन के संयोजन में std::remove का उपयोग करने पर यह व्यवहार स्पष्ट हो जाता है। std::remove का उपयोग करके किसी तत्व को हटाने के बाद, std::size() कंटेनर का मूल आकार लौटाता रहेगा, भले ही कुछ तत्व तार्किक रूप से हटा दिए गए हों। छिपे हुए तत्वों को भौतिक रूप से हटाने के लिए std::erase का उपयोग करने के बाद ही कंटेनर का आकार बदलता है।
2। std::remove
के प्रभाव की कल्पना करते हुए मूल प्रश्न में दिए गए कोड स्निपेट पर विचार करें:
std::vector a;
a.push_back(1);
a.push_back(2);
std::remove(a.begin(), a.end(), 1);
int s = a.size();
std::remove निष्पादित करने के बाद, वेक्टर में अभी भी दो तत्व (2 और 2) हैं, लेकिन पहला तत्व (1) तार्किक रूप से हटा दिया गया है और दृश्य से छिपा हुआ है। इसलिए, छिपे हुए हटाए गए तत्व की उपस्थिति के बावजूद, std::size() 2 लौटाता है।
3। भौतिक निष्कासन के लिए std::erase का उपयोग करना
हटाए गए तत्वों को भौतिक रूप से हटाने और कंटेनर के आकार को अद्यतन करने के लिए, std::erase चलन में आता है। पहले तर्क के रूप में std::remove द्वारा लौटाए गए पुनरावर्तक जोड़े के साथ std::erase को लागू करके, आप छिपे हुए हटाए गए तत्वों को हटा सकते हैं और कंटेनर के आकार को कम कर सकते हैं:
a.erase(std::remove(a.begin(), a.end(), 1), a.end());
इस मामले में, std::भौतिक रूप से मिटा दें तत्व 1 को हटाता है, वेक्टर को एक तत्व (2) और 1 के अद्यतन आकार के साथ छोड़ देता है।
4। std::remove की उपयोगिता के दायरे को समझना
हालांकि std::remove को केवल std::erase के साथ संयोजन में उपयोग करने के लिए डिज़ाइन नहीं किया गया है, यह विभिन्न परिदृश्यों में व्यापक उपयोग पाता है जहां तार्किक विभाजन होता है तत्वों की आवश्यकता है. उदाहरण के लिए, आप std::remove को नियोजित कर सकते हैं:
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3