我做了一个LinkedList
课程。这是singly-linked-list
,我想为此课程制作forward_iterator
。 我已经制作了代码,我想知道我是否已正确实现它。我提到的来源使此代码为here。
template <class T>
struct node
{
T data;
node *next;
};
template <class T>
class LinkedList
{
private :
node<T> *start;
unsigned int numElements;
// Assume all functions are implemented
};
迭代器代码:
class iterator : public std::iterator<std::forward_iterator_tag,node<T>*>
{
node<T>* itr;
public :
iterator (node<T>* temp) : itr(temp) {}
iterator (const iterator& myitr) : itr(myitr.itr) {}
iterator& operator++ ()
{
itr = itr->next;
return *this;
}
bool operator== (const iterator& rhs)
{
return itr == rhs.itr;
}
bool operator!= (const iterator& rhs)
{
return itr != rhs.itr;
}
T& operator*()
{
return itr->data;
}
};
Q值。上述实现是否正确?
Q值。如果没有那么我应该做出什么改变?还需要实施任何额外的事情吗?
答案 0 :(得分:4)
我假设
中缺少括号iterator& operator++
是一个拼写错误(仍然,编译器需要它们)。然后你只缺少两件事:
++
运算符->
运算符所以:
iterator operator++(int) {
iterator result(*this);
++*this;
return result;
}
T *operator->() {
return &itr->data;
}
...然后您已满足ForwardIterator
概念的所有要求。