我的代码如下:
template<class T>
class list
{
public:
class iterator;
};
template<class T>
class list::iterator
{
public:
iterator();
protected:
list* lstptr;
};
list<T>::iterator::iterator()
{
//???
}
我想让list::iterator
的构造函数使iterator::lstptr
指向它所调用的列表。即:
list xlst;
xlst::iterator xitr;
//xitr.lstptr = xlst
我该怎么做?
而且,我正在引用我的迭代器构造函数,或者我应该这样做:
template<class T>
class list<T>::iterator
{
public:
list<T>::iterator();
protected:
list* lstptr;
};
答案 0 :(得分:3)
您可以将列表传递给迭代器的构造函数:
list xlst;
list::iterator xitr(xlst);
或者,您可以创建一个迭代器工厂函数:
list xlst;
list::iterator xitr = xlst.create_iter();
在工厂功能案例中,create_iter()
函数可以使用this
来引用封闭列表。
答案 1 :(得分:0)
由于您不需要更改(重置)指针并且不需要NULL值,我会使用引用。您还可以在分配成员变量时使用初始化列表(如果您使用的是参考,则必须使用)。
template<class T>
class list::iterator
{
public:
iterator( list& parent ) : lstptr( parent ){}
protected:
list& lstptr;
};
如前所述:在list类中使用factory方法构造list :: iterator类型的对象。