正确实现自定义类的迭代器而不使用boost

时间:2014-12-23 08:42:57

标签: c++ stl iterator

我做了一个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值。如果没有那么我应该做出什么改变?还需要实施任何额外的事情吗?

1 个答案:

答案 0 :(得分:4)

我假设

中缺少括号
iterator& operator++ 

是一个拼写错误(仍然,编译器需要它们)。然后你只缺少两件事:

  • 后缀++运算符
  • ->运算符

所以:

iterator operator++(int) {
  iterator result(*this);
  ++*this;
  return result;
}

T *operator->() {
  return &itr->data;
}

...然后您已满足ForwardIterator概念的所有要求。