संपादित करें:std::remove इस उत्तर के लिखे जाने के बाद के लिए दस्तावेज़ीकरण तय किया गया है। एक ही बात लागू होती है list::remove।
मैं आपको एक उदाहरण देता हूं कि आपको यह दिखाने के लिए कि कैसे cpluscplus.com गलत हो सकता है।
std::removeसे कार्य पर विचार करें <algorithm>।
तथ्य यह है कि std::removeकंटेनर से आइटम को हटा नहीं है। इसकी वजह std::removeकेवल पुनरावृत्तियों की एक जोड़ी के साथ काम करता है और कंटेनर के बारे में कुछ भी नहीं जानता है जिसमें वास्तव में आइटम शामिल हैं। वास्तव में, std::removeअंतर्निहित कंटेनर को जानना संभव नहीं है , क्योंकि ऐसा कोई तरीका नहीं है जो पुनरावृत्तियों की एक जोड़ी से उस कंटेनर के बारे में पता लगा सकता है जिसमें पुनरावृत्त होते हैं। तो std::removeवास्तव में आइटम नहीं हटाता है, बस क्योंकि यह नहीं कर सकता । वास्तव में एक कंटेनर से एक आइटम को हटाने का एकमात्र तरीका उस कंटेनर पर एक सदस्य फ़ंक्शन को लागू करना है।
इसलिए यदि आप वस्तुओं को हटाना चाहते हैं, तो Erase-Remove Idiom का उपयोग करें :
v.erase(std::remove(v.begin(), v.end(), 10), v.end());
लेकिन के बारे में गलत जानकारी cplusplus.comदेता हैstd::remove । इसे कहते हैं
ध्यान दें कि यह फ़ंक्शन नए सिरे से पिछले तत्वों को नहीं बदलता है, जो उनके पुराने मूल्यों को बनाए रखते हैं और अभी भी सुलभ हैं ।
जो सही नहीं है। रेंज [new_end, old_end)में itter अभी भी निष्क्रिय है, लेकिन इसका मतलब यह नहीं है कि वे पुराने मूल्यों को बनाए रखते हैं और अभी भी सुलभ हैं। वे अनिर्दिष्ट हैं।
इसी तरह, गलत जानकारी भी cplusplus.comदेता हैlist::remove । यह कहता है ,
ध्यान दें कि एक वैश्विक एल्गोरिथ्म फ़ंक्शन, निकालें, एक समान व्यवहार के साथ मौजूद है लेकिन दो पुनरावृत्तियों के बीच काम कर रहा है।
जो पूरी तरह से गलत है। जैसा कि हमने देखा था कि वैश्विक हटाए जाने के std::removeसमान नहीं है list::remove, क्योंकि हमने देखा कि कंटेनर से आइटम वास्तव में नहीं हटाते हैं क्योंकि यह नहीं हो सकता है , जबकि बाद वाला (सदस्य फ़ंक्शन) वास्तव में आइटम हटा देता है क्योंकि यह कर सकता है ।
यह उत्तर मेरे अन्य उत्तर से निम्नलिखित विषय में कॉपी किया जाता है, जिसमें थोड़ा संशोधन होता है:
नोट: जब से मैं हाल ही में आया था जब मैं उपरोक्त विषय में उत्तर दे रहा था, मुझे याद है। कई त्रुटियां हैं जो मुझे पिछले दो वर्षों में आई हैं, जो मुझे याद नहीं हैं। अगर मैं फिर से आऊं तो मैं कुछ और जोड़ सकता हूं।