मेरा वर्तमान असाइनमेंट इटरेटर के साथ एक सूची लिख रहा है। यह सूची एक समस्या नहीं है क्योंकि इटरेटर वर्ग बनाना है।अर्थात् सूची में ऑपरेटर (और सामान्य सी ++ में)
कुछ स्रोतों से मैंने देखा है कि मेरे दो ऑपरेटर मेरे इटरेटर वर्ग में परिभाषित करने के लिए हैं: operator*
और operator->
।
अब तक बहुत बढ़िया! मेरी इटरेटर संरचना मान तो
// Nested class of List
class _Iter
{
private:
ListElem *pCurr;
const List *pList;
public:
_Iter(ListElem *pCurr, const List *list)
: pCurr_(pCurr), pList(list)
{}
T& operator*() { return pCurr_->data; }
T* operator->() { return &**this; }
};
ListElem जा रहा है
// Nested struct of List
struct ListElem
{
T data;
ListElem *next;
ListElem *prev;
};
साथ है मैं देख सकता हूँ मैं कुछ बड़े पैमाने पर गलत कर रहा हूँ (इस के दोहरे dereferencing के रूप में एक & (* pCurr _-> डेटा तक ले जाएगा), जो dereferencable नहीं है।
मेरी मुख्य समस्या यह समझ में नहीं आ रही है कि -> वास्तव में इस मामले में क्या करना चाहिए। क्या इसे उपयोगकर्ता को ListElem कक्षा तक पहुंच प्रदान करनी चाहिए? यदि ऐसा है, तो मैं क्यों नहीं कर सकता बस
लिखेंListElem *operator->() { return pCurr_; }
एक सूचक वापस करने के बजाय?
operator*() // Return data pointed to by iterator; pCurr_->data;
operator->() // Grant access to data-holding structure; pCurr;
यह सही है, या मैं क्या नहीं मिल रहा है: के रूप में मेरी सूची (और उम्मीद है कि एसटीएल सूचियों) में इस्तेमाल इन दोनों ऑपरेटरों की मेरी समझ है? (और ->
का उचित नाम है?)
दरअसल, मैं अक्सर भूल जाता हूं कि 'यह वास्तव में एक सूचक है। बहुत परेशान: डी – IAE