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

zah*_*ati 0 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;
...
Run Code Online (Sandbox Code Playgroud)

迭代器:

class iterator
{
public:
    iterator():current(NULL){}
    Object & operator*(){return retrieve();}
    iterator & operator++()
    {
        current = current->next;
        return *this;
    }
    ....
private:
    Node *current;
    ...
Run Code Online (Sandbox Code Playgroud)

此代码中存在问题.

for(iterator<Object> itr = list.begin(); itr != list.end(); itr++ )
    std::cout<<(*itr)->name;
Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 5

你的"结束"迭代器是指向最后一个元素的指针.那是错的.

它应该是"过去"的最后一个元素.