私は次のクラスを持っています:
class list {
private:
struct node {
node() { data=T(); prev=next=this; }
˜node() {}
T data;
node *prev;
node *next;
};
public:
class iterator {
public:
iterator() : p(NULL) {}
T & operator*() { return p->data; }
iterator & operator++()
{ p = p->next; return *this; }
iterator & operator++(int)
{ iterator tmp = *this; ++*this; return *tmp; }
bool operator==(const iterator & rhs) const
{ return p == rhs.p; }
bool operator!=(const iterator & rhs) const
{ return p != rhs.p; }
private:
friend class list<T>;
iterator(node *p) : p(p) {}
node *p;
};
iterator begin() { return iterator(head->next); }
iterator end() { return iterator(head); }
list();
˜list();
etc ...
private:
int N;
node *head;
node *findnode(int);
};
begin() 関数がイテレータ クラスのコンストラクタを返すことがわかります。これは、呼び出されたときに新しいイテレータが作成されるということですか? もしそうなら、この反復子が割り当てられている変数が範囲外になった後、メモリはリサイクルされますか? イテレータ コンストラクタには戻り値の型がないため、少し混乱しています。誰かが私の問題に光を当てることができれば、私は最も感謝しています.