मैं सी ++ में चीजों की एक सूची को लागू करने की योजना बना रहा हूं जहां तत्वों को आदेश से हटा दिया जा सकता है। मुझे उम्मीद नहीं है कि मुझे किसी भी प्रकार की यादृच्छिक पहुंच की आवश्यकता होगी (मुझे समय-समय पर सूची को साफ़ करने की आवश्यकता है), और वस्तुओं का क्रम महत्वपूर्ण नहीं है।सी ++ इटरेटर्स की आजीवन और वैधता क्या है?
तो मैंने सोचा कि std::list<Thing*> with this->position = insert(lst.end(), thing)
चाल चलाना चाहिए। मैं थिंग क्लास को प्रत्येक इंस्टेंस की स्थिति याद रखना चाहता हूं ताकि मैं बाद में आसानी से lst.erase(this->position)
कर सकूं।
हालांकि, मैं अभी भी सी ++ एसटीएल कंटेनरों के लिए थोड़ा नया हूं, और मुझे नहीं पता कि यह इतने लंबे समय तक इटरेटर को सुरक्षित रखना सुरक्षित है या नहीं। विशेष रूप से, यह देखते हुए कि आगे बढ़ने से पहले अन्य तत्वों को हटा दिया जाएगा और डालने के बाद।
अच्छा जवाब, यह जानने में भी मदद करेगा कि वेक्टर को पुन: आवंटित करने के कारण क्या हो सकते हैं। (तत्व को सम्मिलित करना स्पष्ट है, लेकिन क्या अन्य हैं?) – Malabarba
वेक्टर (दोनों डालने और निकालने) के किसी भी संशोधन को पुन: आवंटित करने और इसे निष्क्रिय करने की अनुमति है; चाहे कोई ऐसा करता है या नहीं, कार्यान्वयन-परिभाषित है। तो आप यह मानने से सबसे अच्छे हैं कि वेक्टर को किसी भी तरह से संशोधित करने से सभी मौजूदा इटरेटर्स हमेशा अमान्य हो जाते हैं। – Miral