Предполагая, связанный список определяется следующим образом:цикл итератора не считается последний элемент
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;
Эта петля считается до элемента одного элемента до последнего. Таким образом, последний член этого списка не учитывается в этом цикле. Как это исправить?
'template' before 'struct Node'? или что такое «объект»? –
mnciitbhu
@mnciitbhu Я избегал сдачи всего кода. Я просто поместил нужный код. Проблема заключается в списке и итераторе. Объектом может быть любой класс. Это не имеет значения. – zahmati
'iterator begin() {return iterator (head-> next);' выглядит неправильно (Головной и хвост держит действительные данные? Являются ли эти дозорные узлы?) –