2016-03-24 24 views
5

मैं std :: map के तत्वों को प्रारंभ से अंत तक मिटा देना चाहता हूं। मिटा फ़ंक्शन उस तत्व को पुनरावर्तक देता है जो अंतिम तत्व को हटा देता है। क्या यह खत्म नहीं हुआ है? मिटाने वाला इटरेटर क्यों देता है?क्यों map.erase iterator देता है?

auto it = m_map.erase(beginIt, endIt); 

उत्तर

2

मेरा मानना ​​है कि यह मानक कंटेनर प्रकारों में फ़ंक्शन कॉल को एकीकृत करने की कोशिश करने के कारण है। उदाहरण के लिए, std::vector में लौटाया गया इटरेटर endIt

+0

क्या std :: map के लिए कोई मामला है जहां (it! = EndIt)? –

+0

आप यह क्यों कह रहे हैं? 'std :: vector :: erase' पिछले हटाए गए तत्व के बाद पुनरावर्तक पुनरावर्तक करता है, जैसा कि 'std :: map :: erase' जैसा ही है। – SergeyA

+1

@ सेर्गेय 'std :: map :: erase (beg, end) 'रिटर्न' एंड'। 'std :: vector :: मिटाएं (beg, end)' तत्व 'end' के लिए इटेटरेटर को इंगित करता है,' अंत 'नहीं। –

8

यह एक उपयोगी विशेषता है कि C++ मानक लाइब्रेरी अपने सभी कंटेनरों के लिए गोद लेती है।

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

+0

यह केवल एकल-तर्क कार्यों के लिए और कुछ कंटेनर के लिए दो तर्कों के लिए हमेशा सत्य है। मानचित्र पर दो-तर्क 'मिटा' 'endIt' –

+0

को अमान्य नहीं करता है यह किसी भी तरह से मानचित्र पर रेंज मिटाने के लिए उपयोगी नहीं है। – SergeyA

+3

जब आप एक कप चाय बनाते हैं तो यह भी उपयोगी नहीं होता है। लेकिन यह कई मामलों में अभी भी उपयोगी है। – Bathsheba

संबंधित मुद्दे