我正在尝试制作迭代器.作为构造函数,我有:
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)
甲复制构造是一个构造,它接受一个(通常是,但不一定是,常数)参照相同的类型.
因此,iterator(Node *)是不是一个拷贝构造函数.它是来自您集合的某个内部实体的构造函数.
在集合的begin()(end()以及其他返回迭代器的方法)的实现中,您确实需要该构造函数.然而:
explicit以便它不会用于隐式转换.friend声明.您应该将迭代器和内部Node类型嵌套在集合中; 这样,Node它本身就可以是私有的(但你没有显示你正在编写的集合的完整结构,所以我不能肯定地说如何将它们放在一起).| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |