std::list 的 const_iterator
和 iterator
实现之间有什么主要区别吗,除了 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/