迭代器循环不计算最后一项
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.
假设链表是这样定义的:
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.