链接列表const迭代器

时间:2014-02-19 19:52:47

标签: c++ linked-list operator-overloading const-iterator

我已经实现了一个双向链表,并创建了一个扩展std::iterator的迭代器。我现在正在尝试创建const版本。

我试过了:

typename typedef list_iterator<T_>        iterator;
typename typedef list_iterator<T_> const  const_iterator;

如果我这样做,我会收到此错误:

error C2678: binary '--' : no operator found which takes a left-hand operand of type 'const    list_iterator<T_>' (or there is no acceptable conversion)

这是我的operator--

list_iterator& operator -- ()
{
    _current = _current->_previous;
    return *this;
}

list_iterator operator--(int) // postfix
{
    list_iterator hold = *this;
    --*this;
    return list_iterator( hold );
}

如果我把

list_iterator operator--() const

...我无法修改_current

的值

如何使我的迭代器现在像const_iterator一样工作,这样我可以调用我的链表来获取begin()end()的常量版本,以及{{1 }和cbegin()

1 个答案:

答案 0 :(得分:2)

右。问题是你的const_iterator typedef的声明。 (见How to correctly implement custom iterators and const_iterators?

而不是

typename typedef list_iterator<T_> const  const_iterator;

你想要

typename typedef list_iterator<const  T_> const_iterator;