假设链接列表以这种方式定义:
template <typename Object>
struct Node{
Object data;
Node *prev;
Node *next;
Node(const Object & d = Object(), Node *p = NULL, Node *n = NULL)
: data(d), prev(p),next(n){}
};
template <typename Object>
class List
{
public:
iterator begin(){return iterator(head->next);}
iterator end(){return iterator(tail);}
....
private:
Node *head=nullptr;
Node *tail=nullptr;
...
迭代器:
class iterator
{
public:
iterator():current(NULL){}
Object & operator*(){return retrieve();}
iterator & operator++()
{
current = current->next;
return *this;
}
....
private:
Node *current;
...
此代码存在问题。
for(iterator<Object> itr = list.begin(); itr != list.end(); itr++ )
std::cout<<(*itr)->name;
此循环计数直到最后一个项目成员之前。因此,此列表的最后一个成员不计入此循环。如何解决?