2009-05-07 10 views
8

मान लीजिए कि मेरे पास एक सूची है, जिसमें कोई नया नोड्स जोड़ा या हटाया नहीं गया है। हालांकि, नोड्स चारों ओर shuffled किया जा सकता है।सूची को स्टोर करने के लिए सुरक्षित :: बाद में उपयोग के लिए iterator?

क्या यह एक पुनरावर्तक को सहेजने के लिए सुरक्षित है, सूची में नोड को इंगित करता है, और इसे कुछ मनमाने ढंग से बाद में एक्सेस करता है?

संपादित करें (अनुवर्ती प्रश्न): सूची :: splice() के लिए प्रलेखन कहता है कि यह तर्क सूची से तत्वों को हटा देता है। क्या इसका मतलब यह है कि अगर मैं स्प्लिस को कॉल करता हूं, तो फ़ंक्शन में तर्क के समान सूची का उपयोग करके, मौजूदा इटरेटर्स को अमान्य कर दिया जाएगा?

उत्तर

1

हाँ, std::list iterators सिर्फ एक नोड की ओर संकेत करती हैं। आप सूची में हटा सकते हैं, हटा सकते हैं (अन्य नोड्स), और सूची में नोड्स को पुनर्व्यवस्थित करें और इटरेटर को अमान्य नहीं किया गया है।

+9

कोई गारंटी नहीं है कि एक इटरेटर एक सूचक है। असल में आप शायद अनुदान दे सकते हैं कि एक std :: list <> :: iterator एक सूचक नहीं है क्योंकि इसे सभी इटरेटर ऑपरेशंस (जैसे ++) के लिए बुद्धिमान प्रसंस्करण करने की आवश्यकता है। –

24

हां।
मानक अनुदानकर्ता जो सूची में पुनरावृत्तकर्ताओं को तब तक अमान्य नहीं किया जाएगा जब तक वे आइटम (वे रूपांतर रूप से बोलते हुए) को सूची से हटा नहीं देते हैं।

इस पेज से: http://www.sgi.com/tech/stl/List.html

Lists have the important property that insertion and splicing do not 
invalidate iterators to list elements, and that even removal invalidates 
only the iterators that point to the elements that are removed. 
संबंधित मुद्दे

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