在迭代器上使用复制构造函数

时间:2017-12-05 21:11:20

标签: c++ iterator

我试图制作迭代器。作为构造函数,我有:

iterator(Node* node)
{
    it = node;
}

和复制构造函数:

iterator(const iterator& x)
{
    it = x.it;
}

我被告知使用第一个不是一个好主意,而第二个(这是更好的)

我不确定如何在这样的方法中使用第二种方法:

typedef iterator<Key, Info> ringIterator;

ringIterator begin()
{
    return ringIterator(any);
}

1 个答案:

答案 0 :(得分:5)

copy constructor是一个构造函数,它接受对同一类型的(通常但不一定是常量)引用。

因此,iterator(Node *) copy 构造函数。它是来自您集合的某个内部实体的构造函数。

在集合的begin()(和end()以及其他返回迭代器的方法)的实现中,您确实需要该构造函数。但是:

  1. 应将其标记为explicit,以便不会用于隐式转换。
  2. 最好在两个班级之外不可见。可能是将其设为私有并使用合适的friend声明。您应该将迭代器和内部Node类型嵌套在集合中;这样Node本身就可以是私密的(但你不能显示你正在编写的集合的完整结构,所以我无法确定如何将它们放在一起)。