2014-12-13 86 views
2

我的C++代码有点问题。我在头变量列表,列表中的最后和实际节点(下图)链表,我需要让我自己的(学校工作)迭代器..C++自己的迭代器

list http://www.attanon.eu/list.png

我有。

我的类迭代器是本

class iterator 
{ 
    Node* _node; 
public: 
    iterator(Node* node) : _node(node){} 
    ~iterator(){ _node = nullptr; } 

    iterator& operator=(const iterator& other) 
    { 
     _node = other._node; 
     return *this; 
    } 
    bool operator==(const iterator& other) 
    { 
     if (_node == nullptr || other._node == nullptr) 
     { 
      return false; 
     } 
     else 
     { 
      return _node->_data == other._node->_data; 
     } 
    } 
    bool operator!=(const iterator& other) 
    { 
     if (_node == nullptr || other._node == nullptr) 
     { 
      return false; 
     } 
     else 
     { 
      return _node->_data != other._node->_data; 
     } 
    } 

    iterator& operator++() // prefix 
    { 
     if (_node != nullptr) 
     { 
      _node = _node->_next; 
     } 
     return *this; 
    } 
    iterator operator++(int) // postfix 
    { 
     iterator temp(*this); 
     ++(*this); 
     return temp; 
    } 
    T& operator*() // dereference 
    { 
     return _node->_data; 
    } 
    T* operator->() // šipková notace 
    { 
     return &*(List<T>::iterator)*this; 
    } 
}; 

,我需要做的方法开始和结束的迭代throught名单。

我尝试这种方式,但与此实现我没有得到列表的最后一个节点。

iterator begin() 
{ 
    return iterator(_head); 
} 

iterator end() 
{ 
    return iterator(_last); 
} 

任何人都可以帮助我如何使这两种方法?

P.S.对不起,我的英语不好,我知道。

感谢您的帮助

编辑:

我的节点类是该

class Node 
{ 
public: 
    T _data; 
    Node* _next; 
}; 

我用它进行循环测试..

for (List<int>::iterator it = list->begin(); it != list->end(); it++) 
{ 
    std::cout << *it << std::endl; 
} 

回答

6

结束迭代器应该是到“过去 - 结束”元素,而不是实际的最后一个元素。所以,你要真有:

iterator end() 
{ 
    return iterator(nullptr); 
} 

,然后实现operator==为:

bool operator==(const iterator& other) { return _node == other._node; } 
bool operator!=(const iterator& other) { !((*this) == other); } 

,使其接受nullptr

+0

我找到了这种方式,但有了这个我需要重做我的迭代器操作符,因为它没有显示任何想法。 – JAttanonRadar 2014-12-13 18:40:25

+0

@JAttanonRadar你的意思是“它没有显示任何东西”是什么意思? – Shoe 2014-12-13 18:42:36

+0

如果我使用测试功能,它不是列表中的数据.. – JAttanonRadar 2014-12-13 18:44:14