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

时间:2015-06-01 16:06:48

标签: c++ templates iterator

假设链接列表以这种方式定义:

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;

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

1 个答案:

答案 0 :(得分:5)

你的&#34;结束&#34;迭代器是指向最后一个元素的指针。那是错的。

它应该是"one past" the last element