迭代器循环不计算最后一项

Iterator loop does not count the last item

假设链表是这样定义的:

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;

这个循环一直计数到最后一个之前的一个项目成员。因此,此列表的最后一个成员不计入此循环。如何解决?

您的 "end" 迭代器是指向最后一个元素的指针。错了。

应该是"one past" the last element.