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

C++ में `std::remove` तत्वों को हटाने के बजाय उन्हें पुनर्व्यवस्थित क्यों करता है?

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

  Why Does `std::remove` Rearrange Elements Instead of Deleting Them in C  ?

अंतर को समझना: मिटाना बनाम हटाना

सी प्रोग्रामिंग के दायरे में, std::erase और std::remove दो हैं जब कंटेनरों को संशोधित करने की बात आती है तो अलग-अलग कार्य अलग-अलग उद्देश्यों की पूर्ति करते हैं। जबकि दोनों कार्यों का उपयोग कंटेनर से तत्वों को खत्म करने के लिए किया जा सकता है, वे अपने व्यवहार में भिन्न होते हैं। रिमूव एक एल्गोरिदम है जो तत्वों की एक श्रृंखला पर काम करता है और उन्हें कंटेनर के भीतर पुनर्व्यवस्थित करता है। यह किसी भी तत्व को सीधे नहीं हटाता है बल्कि मेल न खाने वाले तत्वों को मेल खाने वाले तत्वों के ऊपर ले जाता है। यह प्रक्रिया अनुक्रम की शुरुआत में मिलान तत्वों और अंत में गैर-मिलान तत्वों का एक समूह बनाती है।

Std::erase: तत्वों को हटाना

पर दूसरी ओर, std::erase एक फ़ंक्शन है जो एक कंटेनर से निर्दिष्ट तत्वों को हटाता है, प्रभावी ढंग से इसके आकार को कम करता है। यह तर्कों के रूप में पुनरावृत्तियों की एक श्रृंखला लेता है और उस सीमा के भीतर सभी तत्वों को हटा देता है, जिसमें हटाने के लिए चिह्नित तत्व भी शामिल हैं।

आउटपुट को समझना

प्रदान किए गए कोड उदाहरण में, निम्नलिखित अवलोकन किए जा सकते हैं:

Std::remove:

कब std::remove का उपयोग std::erase के बिना किया जाता है, यह बस तत्वों को पुनर्व्यवस्थित करता है, जिससे वेक्टर का आकार अपरिवर्तित रहता है। इसलिए, वेक्टर के माध्यम से पुनरावृत्त करने पर 2,2 का आउटपुट प्राप्त होगा। मेल खाने वाले तत्व (इस मामले में, 1 की एकल घटना) और तदनुसार वेक्टर के आकार को अपडेट करता है। परिणामस्वरूप, आउटपुट केवल 2 दिखाता है। मुहावरा:

जबकि std::remove का उपयोग आमतौर पर "मिटाना-निकालना" के भाग के रूप में मिटाने के साथ किया जाता है मुहावरा," इसे स्वतंत्र रूप से भी नियोजित किया जा सकता है। यह उन परिदृश्यों में उपयोगी है जहां निष्कासन आदेश महत्वपूर्ण नहीं है और प्राथमिक लक्ष्य कंटेनर के भीतर मिलान और गैर-मिलान तत्वों को अलग करना है।

  1. गैर-विलोपन के लिए तर्क: का डिज़ाइन std::remove, जिसमें विलोपन शामिल नहीं है, मनमाने ढंग से फॉरवर्ड इटरेटर्स के साथ काम करने की क्षमता से उत्पन्न होता है। ऐसे पुनरावर्तकों के पास तत्वों को हटाने की क्षमता नहीं हो सकती है, इसलिए std::remove की सीमित कार्यक्षमता है।
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3