探讨c++标准模板库中的List

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

//DynaList.h

#ifndef DYNALIST_H

#define DYNALIST_H

template<class T>

class DynaList

{

public:

DynaList();

~DynaList();

public:

//增加一个节点

int Add(T objSrc);

T& operator[](int nIndex);

int Size();

private:

struct tagNode

{

//加入链表的对象

T t;

//是否第一次被初始化

bool bFirst;

//节点索引值

int nIndex;

//下一个节点指针

tagNode* pNext;

//前一格节点指针

tagNode* pBefore;

};

private:

//节点临时指针

tagNode* m_pTem;

//链表的头指针

tagNode* m_pHead;

//新节点指针

tagNode* m_pNew;

int m_nSize;

};

#endif

//DynaList.cpp

#include "DynaList.h"

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <memory.h>

using namespace std;

template<class T>

DynaList<T>::DynaList()

{

//初始化数据

m_pHead = NULL;

m_pNew = NULL;

m_pHead = new tagNode;

m_pHead->nIndex = -1;

m_pHead->bFirst = true;

m_pHead->pBefore = NULL;

m_pHead->pNext = NULL;

m_nSize = 0;

}

//增加节点

template<class T>

int DynaList<T>::Add(T objSrc)

{

//设置一个遍历的指针

m_pTem = m_pHead;

//将遍历指针移到最后一个节点

while(m_pTem->pNext != NULL)

{

m_pTem = m_pTem->pNext;

}

//新节点的处理

m_pNew = new tagNode;

m_pNew->pBefore = m_pTem;

m_pNew->pNext = NULL;

m_pNew->bFirst = true;

m_pNew->nIndex = m_pTem->nIndex + 1;

//内容复制

memcpy(&m_pNew->t,&objSrc,sizeof(objSrc));

m_pTem->pNext = m_pNew;

//得到首节点

m_pHead = m_pTem;

++m_nSize;

return m_pNew->nIndex;

}

template<class T>

int DynaList<T>::Size()

{

return m_nSize;

}

template<class T>

T& DynaList<T>::operator[](int nIndex)

{

if (nIndex < 0)

{

throw exception("It is not index!");

}

if (nIndex > m_nSize - 1)

{

throw exception("It is out of the range!");

}

while(m_pHead->pNext != NULL)

{

if (m_pHead->nIndex == nIndex)

{

return m_pHead->t;

}

m_pHead = m_pHead->pNext;

}

return m_pHead->t;

}

template<class T>

DynaList<T>::~DynaList()

{

while(m_pHead->pNext != NULL)

{

m_pHead = m_pHead->pNext;

}

//将节点一个一个释放掉

while(m_pHead->pBefore != NULL)

{

tagNode* pTem = m_pHead;

m_pHead = m_pHead->pBefore;

delete pTem;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航