关于链表中的位置抽象类的问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 04:19:24
像MFC中CList中的POSITION一样。

像定义个一个Position类,使得可以这样使用链表:

CMyList< int > list;

//............

Position p;

for( p = list.GetHeadPosition(); p != 0; p++ )
{
//................
}

请问Position类应该怎么实现??关键的问题是,CMyList是个模板,而Position却不是。。。如何关联??

请高手附上代码最好。。。谢谢。

Position相当于CMyList中的键(下标),跟CMyList中存放的数据的类型没有关系,但跟CMyList中跟位置相关的算法关系密切。
比如:
class Position
{
protected:
int m_p; //只用一个简单的int表示位置
public:
Position(int);
Position(Position&);
int getPos();
friend Position operator ++(Position&,int);
...
}

//比方说CMyList用vector实现
template<class T>
class CMyList
{
procected:
vector<T> m_list;
public:
CMyList();
int GetCount()const;
Position GetHeadPosition() const;
T GetAt(const Position p) const;
T GetNext(Postion &p);
Position AddTail(T e);
...
}

Position CMyList::GetHeadPosition( ) const
{
return Position(0);
}

template<class T>
T CMyList<T>::GetAt(Position p)
{
return m_list.at(p.getPos());
}

template<class T>
T CMyList<T>::GetNext(Position &p)
{
int pos=p.getPost();
p++;
return m_list