【发布时间】:2016-07-22 15:36:53
【问题描述】:
除了operator* 和operator-> 之外,std::list 的const_iterator 和iterator 实现之间是否有任何主要区别。您可以在下面看到我的非模板作业式示例来说明要点。据我了解,其余方法只是为这些类相互复制,例如 CTOR、operator==、operator!=、operator++、operator++(int)、operator--、operator--(int)。
class iterator
{
private:
Node* m_node;
public:
iterator(Node* node)
: m_node(node)
{
}
int& operator*()
{
return m_node->value;
}
Node* operator->()
{
return m_node;
}
....
}
现在 const 迭代器实现
class const_iterator
{
private:
Node* m_node;
public:
const_iterator(Node* node)
: m_node(node)
{
}
int operator*() const
{
return m_node->value;
}
const Node* operator->() const
{
return m_node;
}
......
}
如果这是主要区别,那么我们也应该处理重复,对吗?
【问题讨论】:
-
你的迭代器可以转换成 const_iterator 吗?
-
@RichardCritten 是的,我认为应该是,但我没有写过。
iterator应该有operator const_iterator? -
我在某些实现中看到
iterator派生自const_iterator。 -
是的,比如微软的 impl! :)
标签: c++ c++11 stl iterator stdlist