पर विचार करें:map.erase (map.end())?
#include <map>
int main()
{
std::map< int, int > m;
m[ 0 ] = 0;
m[ 1 ] = 1;
m.erase(0); // ok
m.erase(2); // no-op
m.erase(m.find(2)); // boom!
}
(। ठीक है, तो शीर्षक वार्ता समाप्त() इटरेटर मिटा abouting, लेकिन() एक गैर-मौजूद कुंजी के लिए अंत वापस आ जाएगी लगता है)
क्यों एक गैर मिटा रहा है -मुख कुंजी ठीक है, फिर भी अंत मिटा रहा है() उड़ाता है। मैं मानक में इसका कोई स्पष्ट उल्लेख नहीं देख सका?
मैंने इसे VS2005 (डीबग कॉन्फ़िगरेशन में अपवाद फेंक दिया) और जीसीसी 4.0.1 (100% सीपीयू) पर कोशिश की है। क्या यह कार्यान्वयन निर्भर है?
धन्यवाद।
स्पष्टीकरण के लिए: मिटाएं() के विभिन्न ओवरलोड हैं, और इटरेटर संस्करण को एक वैध तत्व की आवश्यकता है। – rlbond
मिटाएं (यह) मिटाने के बराबर है (यह, ++ इटरेटर (इसे)), जो मुझे यह देखने में मदद करता है कि मिटाएं (यह) इसके साथ अमान्य है = map.end()। .end() के बाद आपको एक और इटरेटर की आवश्यकता होगी। –
कोई भी मानक के लिए एक लिंक प्रदान कर सकते हैं? –