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

ssw*_*qaa 4 c++ iterator

我正在尝试制作迭代器.作为构造函数,我有:

iterator(Node* node)
{
    it = node;
}
Run Code Online (Sandbox Code Playgroud)

和复制构造函数:

iterator(const iterator& x)
{
    it = x.it;
}
Run Code Online (Sandbox Code Playgroud)

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

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

typedef iterator<Key, Info> ringIterator;

ringIterator begin()
{
    return ringIterator(any);
}
Run Code Online (Sandbox Code Playgroud)

Jan*_*dec 5

复制构造是一个构造,它接受一个(通常是,但不一定是,常数)参照相同的类型.

因此,iterator(Node *)不是一个拷贝构造函数.它是来自您集合的某个内部实体的构造函数.

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

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