C++ 在迭代器上使用复制构造函数
我在试着做迭代器。作为一名建造师,我有:C++ 在迭代器上使用复制构造函数,c++,iterator,C++,Iterator,我在试着做迭代器。作为一名建造师,我有: iterator(Node* node) { it = node; } 和复制构造函数: iterator(const iterator& x) { it = x.it; } 有人告诉我,使用第一个不是一个好主意,而使用第二个(哪个更好) 我不知道如何在这样的方法中使用第二种方法: typedef iterator<Key, Info> ringIterator; ringIterator begin() {
iterator(Node* node)
{
it = node;
}
和复制构造函数:
iterator(const iterator& x)
{
it = x.it;
}
有人告诉我,使用第一个不是一个好主意,而使用第二个(哪个更好)
我不知道如何在这样的方法中使用第二种方法:
typedef iterator<Key, Info> ringIterator;
ringIterator begin()
{
return ringIterator(any);
}
typedef迭代器环迭代器;
环迭代器begin()
{
返回环迭代器(任意);
}
A是一个构造函数,它接受对同一类型的引用(通常但不一定是常量)
因此,迭代器(节点*)
不是复制构造函数。它是集合中某个内部实体的构造函数
在集合的begin()
(和end()
以及其他返回迭代器的方法)的实现中确实需要该构造函数。然而:
friend
声明。您可能应该将迭代器和内部节点
类型嵌套在集合中;这样,节点本身就可以是私有的(但您没有显示您正在编写的集合的完整结构,因此我不能确定如何将其组合在一起)
第一个不是复制构造函数,这是一个构造函数,不可能避免这个。通常,我们将此构造函数声明为私有,并将类节点声明为迭代器的朋友,以便它可以将迭代器初始化为内部开始节点的值。例如,在“如何实现”中,我正在执行双链接环,其中节点为私有结构。我的迭代器是Ring类的公共部分您可能对声明感兴趣的部分:请注意,复制构造函数不必接受常量引用。@juanchopanza但有许多地方认为复制构造函数永远不会修改参数reasons@Caleth当然,但那是另一回事。