除了const_iteratoriterator以外,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/

    10-16 05:19