c++ - std::list 的 const_iterator 与迭代器

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

std::list 的 const_iteratoriterator 实现之间有什么主要区别吗,除了 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++ - std::list 的 const_iterator 与迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38530431/

相关文章:

c++ - 有或没有虚拟的子类与性能与便利性

c++ - 从 set<A*,Comparator> 获取 A 成员到 list<A>

c++ - 使用备忘录的背包问题中的标题

c++ - utf8 <-> utf16 : codecvt poor performance

c++ - 用于执行 C++ 系统函数的用户定义目录

c++ - 绕过 C++/STL 中的容器协变

c++ - 使用 operator[] 访问 unique_ptr 的私有(private) std::map

c++ - += 在没有 boost 的 vector 上

c++ - 多进程c++(11)以链表指针作为全局变量

c++ - 有没有一种方法可以在编译时断言变量是 C++ 中的类、结构还是基本类型?