1

我的代码如下所示:

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它调用的列表。IE:

list xlst;
xlst::iterator xitr;
//xitr.lstptr = xlst

我该怎么做?

而且,我是否正确引用了我的迭代器构造函数,或者我应该做这样的事情:

template<class T>
class list<T>::iterator
{
public:
    list<T>::iterator();
protected:
    list* lstptr;
};
4

2 回答 2

3

您可以将列表传递给迭代器的构造函数:

list xlst;
list::iterator xitr(xlst);

或者,您可以创建一个迭代器工厂函数:

list xlst;
list::iterator xitr = xlst.create_iter();

在工厂函数情况下,create_iter()函数可以this用来引用封闭列表。

于 2009-05-17T21:54:29.973 回答
0

由于您不需要更改(重新安装)指针并且不需要 NULL 值,因此我将改为使用引用。您也可以在分配成员变量时使用初始化列表(如果您使用引用,则必须这样做)。

template<class T>
class list::iterator
{
public:
    iterator( list& parent ) : lstptr( parent ){}

protected:
    list& lstptr;
};

并且如前所述:使用 list 类中的工厂方法来构造 list::iterator 类型的对象。

于 2009-05-18T17:20:32.593 回答