我试图制作迭代器。作为构造函数,我有:
iterator(Node* node)
{
it = node;
}
和复制构造函数:
iterator(const iterator& x)
{
it = x.it;
}
我被告知使用第一个不是一个好主意,而第二个(这是更好的)
我不确定如何在这样的方法中使用第二种方法:
typedef iterator<Key, Info> ringIterator;
ringIterator begin()
{
return ringIterator(any);
}
答案 0 :(得分:5)
copy constructor是一个构造函数,它接受对同一类型的(通常但不一定是常量)引用。
因此,iterator(Node *)
不 copy 构造函数。它是来自您集合的某个内部实体的构造函数。
在集合的begin()
(和end()
以及其他返回迭代器的方法)的实现中,您确实需要该构造函数。但是:
explicit
,以便不会用于隐式转换。friend
声明。您应该将迭代器和内部Node
类型嵌套在集合中;这样Node
本身就可以是私密的(但你不能显示你正在编写的集合的完整结构,所以我无法确定如何将它们放在一起)。