const_iterator与std :: list的迭代器

时间:2016-07-22 15:36:54

标签: c++ c++11 stl iterator stdlist

const_iteratoriterator之外,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;
    }

 ....
}

如果这是主要区别,那么我们也应该处理重复,对吗?

1 个答案:

答案 0 :(得分:1)

您缺少下面描述的一些内容,并且该类尚未“加上寺庙化”,但该方法与标准模板库的one implementation使用的方法相同。

  • 两个迭代器都需要一个默认构造函数 - 这提供了一种生成空迭代器的方法,稍后可以分配
  • const_iterator必须可以从iterator 构建 - 向const_iterator添加构造函数以接受“常规”迭代器。

就代码重复而言,这确实是一个公平的观察。但是,大多数实现都适合单行,并返回不同的类型,因此尝试在两个模板之间共享实现会使代码更难阅读。