除const_iterator
和iterator
之外,std :: list的operator*
和operator->
实现之间是否存在重大差异?下面你可以看到我的非模板化作业风格的例子来展示要点。据我所知,其余的方法只是为这些类复制,例如CTOR,operator==
,operator!=
,operator++
,operator++(int)
,{{1 },operator--
。
operator--(int)
现在是const迭代器实现
class iterator
{
private:
Node* m_node;
public:
iterator(Node* node)
: m_node(node)
{
}
int& operator*()
{
return m_node->value;
}
Node* operator->()
{
return m_node;
}
....
}
如果这是主要区别,那么我们也应该处理重复,对吗?
答案 0 :(得分:1)
您缺少下面描述的一些内容,并且该类尚未“加上寺庙化”,但该方法与标准模板库的one implementation使用的方法相同。
const_iterator
必须可以从iterator
构建 - 向const_iterator
添加构造函数以接受“常规”迭代器。就代码重复而言,这确实是一个公平的观察。但是,大多数实现都适合单行,并返回不同的类型,因此尝试在两个模板之间共享实现会使代码更难阅读。