除了const_iterator
和iterator
以外,std::list的operator*
和operator->
实现之间没有任何主要区别。在下面,您可以看到我的非模板作业样式示例,以显示要点。据我了解,其余方法只是为这些类互相复制,例如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;
}
......
}
如果这是主要区别,那么我们也应该处理重复,对吗?
最佳答案
您缺少一些下面描述的内容,并且该类尚未“模板化”,但是该方法与标准模板库的one implementation使用的方法相同。
const_iterator
必须可从iterator
构造。-向const_iterator
添加构造函数以接受“常规”迭代器。 就代码重复而言,这确实是一个公平的观察。但是,大多数实现只适合一行,并且返回不同的类型,因此,尝试在两个模板之间共享实现将使代码更难阅读。
关于c++ - const_iterator vs std::list的迭代器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38530431/