문제

다음과 같이 보이는 코드가 있습니다.

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;
};
도움이 되었습니까?

해결책

목록을 반복자의 생성자에게 전달할 수 있습니다.

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

또는 반복 공장 기능을 만들 수 있습니다.

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

공장 기능의 경우 create_iter() 함수는 사용할 수 있습니다 this 동봉 목록을 참조합니다.

다른 팁

포인터를 변경 (재판매) 할 필요가없고 Null 값이 필요하지 않으므로 대신 참조를 사용합니다. 또한 멤버 변수를 할당 할 때 이니셜 라이저 목록을 사용할 수 있습니다 (참조를 사용하는 경우).

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

protected:
    list& lstptr;
};

그리고 앞에서 언급했듯이 : 목록 클래스 내부의 공장 메소드를 사용하여 유형 목록의 개체를 구성합니다 :: iterator.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top