मुझे एसटीएल list
इटेटरेटर के लिए अब तक का अगला मूल्य मिलना है, लेकिन यह operator+
, vector
को लागू नहीं करता है। मुझे वह मूल्य क्यों और कैसे मिल सकता है जहां मैं चाहता हूं?क्यों केवल यादृच्छिक-पहुंच-इटरेटर ऑपरेटर + C++ में लागू करता है?
मुझे लगता है कि मैं ऐसा कर सकता हूं अगर मैं operator++
कई बार कॉल करता हूं, लेकिन क्या यह थोड़ा गंदा नहीं है?
list<int> l;
...omitted...
list<int>::iterator itr = l.begin() + 3; // but, list iterator does not have
// operator+
मैं क्या चाहते हैं के लिए सबसे अच्छा समाधान क्या है:
मुझे क्या करना चाहते हैं निम्नलिखित है? जबकि यह रेखीय समय में operator++
पर पाश और पूर्ण करता है, तो इटरेटर नहीं रैंडम एक्सेस है जाएगा अगर इटरेटर रैंडम एक्सेस है
list<int>::iterator itr = l.begin();
std::advance(itr, 3);
advance
निरंतर समय में operator+
और पूरा उपयोग करेगा:
(लगभग) असंबंधित: आपको यह सुनिश्चित करने की आवश्यकता है कि इस स्थिति तक पहुंचना संभव है, अन्यथा आप अपरिभाषित व्यवहार का आह्वान करेंगे। हालांकि 'सूची :: से शुरू करें() 'अधिक सामान्य मामले में, यह आसान है (गैर रैंडमएक्सइटरेटर के लिए)' सूची :: अंत()' के साथ दूरी 'std :: दूरी '... ओ (एन) भी। –
इस धागे पर दो उत्कृष्ट जवाब। समुदाय को +1! –