Benim şu anki atama adım adım elde listesini yazıyor. Liste, yineleyici sınıfı oluşturmak kadar çok sorun oluşturmuyor.anlamsal - listelerinde> operatör (ve genel C++) ile
Birkaç kaynaktan, yineleyici sınıfımda tanımlamak için iki operatörün olduğunu gördüm: operator*
ve operator->
.
Şimdiye kadar harika! Benim yineleyici yapısını düşünürsek ListElem
// Nested struct of List
struct ListElem
{
T data;
ListElem *next;
ListElem *prev;
};
olmak öylesine
// 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; }
};
olduğunu ben & (* pCurr _-> verilerine yol açacak bu çifte dereferencing olarak (kitlesel yanlış bir şey yapıyorum görebilirsiniz (bu, kabul edilemez)
Asıl problemim, aslında bu durumda ne yapması gerektiğini anlamak değil, kullanıcı ListElem sınıfına erişim izni vermeli mi? sadece
yazListElem *operator->() { return pCurr_; }
yerine bir işaretçi döndürmek?
operator*() // Return data pointed to by iterator; pCurr_->data;
operator->() // Grant access to data-holding structure; pCurr;
bu doğru mu, yoksa ne almıyorum: listemde (ve umarım STL listeleri) kullanılan bu iki operatörlerin Benim anlayış bu? (Ve ->
, uygun bir ada sahip mi?)
Gerçekten de, bu 'aslında' bir işaretçi olduğunu unutuyorum. Çok sinir bozucu: D – IAE