2013-08-29 4 views
7

प्रश्न की तरह, क्या आप एक बाल्टी इटरेटर (local_iterator) का उपयोग कर std::unordered_set से तत्व हटा सकते हैं? मैं दो संभव समाधान देख सकते हैं:बाल्टी इटरेटर्स के माध्यम से std :: unordered_set से तत्वों को निकालना संभव है?

  • के बाद से मिटा() केवल वैश्विक iterator रों को स्वीकार करता है, वहाँ local_iterator के लिए बराबर कार्यक्षमता है?
  • यह एक local_iterator के लिए बराबर वैश्विक iterator प्राप्त करने के लिए संभव है?

यदि यह संभव नहीं है, तो कृपया यह बताएं कि यह क्यों नहीं है। के बाद से वहाँ इंटरफ़ेस जो इस का समर्थन करता है में कोई समारोह है

+3

आप उसी फ़ंक्शन कॉल में 'इसे' और '++' दोनों का उपयोग नहीं कर सकते हैं। –

+0

अद्यतन, फिर भी एक ही त्रुटि में परिणाम। –

+2

आपको ['std :: remove_if'] (http://en.cppreference.com/w/cpp/algorithm/remove) पर पढ़ना चाहिए। यह वास्तव में तत्वों को हटा नहीं है। –

उत्तर

5

स्पष्ट जवाब, नहीं है। वहाँ भी स्पष्ट कारण कि एक local_iterator बहुत कम जानकारी होती है के लिए, एक local_iterator से एक iterator को पाने के लिए कोई रास्ता नहीं है। ( के लिए सबसे अधिक कार्यान्वयन, मुझे संदेह है कि यह को erase(local_iterator) लागू करने के लिए काफी सरल होगा, मानक आवश्यक था। दूसरी तरफ, मैं इसके लिए उपयोग करने योग्य मानक के बारे में नहीं सोच सकता, जो मानक हो सकता है इसकी आवश्यकता नहीं थी।)

+0

का उपयोग करके 'local_iterator'' iterator' में कनवर्ट करना था, मुझे "स्पष्ट" तर्क दोनों पर संदेह है। (1) स्थानीय_इटरेटर को पुनरावर्तक में बदलने के लिए बाल्टी संख्या की आवश्यकता होगी? (2) एक बाल्टी पर पुनरावृत्ति करते समय स्थानीय_इटरेटर को मिटाने के लिए बहुत सारे उपयोग-मामले हैं - जैसे कि पूर्ण कंटेनर पर पुनरावृत्ति करते समय इटरेटर को मिटाने के लिए उपयोग-मामले हैं। स्थानीय_इटरेटर के मिटाने के बिना, क्या std :: unordered_set's const_local_iterator और local_iterator के बीच कोई अंतर है? – chs

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