51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2543|回复: 1
打印 上一主题 下一主题

[其他] list1.h

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-12-21 16:41:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#ifndef TLIST_H
#define TLIST_H
#define SLOP_OVER_INOF PRINT("越界!返回最后一个成员!");
#include "base.h"
template <class T>
class tList
{
private:
T    *units;      //动态分配的数组
int   numofMax;   //当前分配的元素的最大数目
int  numofUnit;  //当前存放的元素的实际数目
int  freep;      //Next()函数使用的标记
public:

tList()
{  
  Reset();
}
tList(tList& _obj)
{  
  Reset();
  int count = _obj.Count();
  for(int i = 0;i < count;i++)
  {
   Assign(_obj.Get(i));
  }
}
~tList()
{
  Free();
  Reset();
}
protected:
/*########################*/
//void Reset()
//重置成员变量
/*########################*/
void Reset()
{
  units = NULL;
  numofMax = 0;
  numofUnit = 0;
  freep = 0;
  return;
}
/*########################*/
//void Free()
//释放内存
/*########################*/
void Free()
{
  if(units != NULL)
  {
   DELETE_P(units);
  }
}
private:
/*########################*/
//void Extend(int numofInc)
//扩展内存空间
/*########################*/
void Extend(int numofInc)
{
  if (numofInc == NULL)
  {
   numofInc = sizeof(T);
  }
        if (units == NULL)
        {
            //第一次
            NEW(units,T[numofInc]);
            numofMax = numofInc;
        }
        else
        {
            numofInc += numofMax;
   T *tmp;
   NEW(tmp,T[numofInc]);
            CopyElements(tmp, units, (sizeof(T) * numofUnit));
            Free();   
            units = tmp;
   tmp = NULL;
            numofMax = numofInc;
        }
  return;
}
/*########################*/
//void Insert(const T& _value,int _pos)
//向链表中插入成员
/*########################*/
void Insert(const T& _value,int _pos)
{  
  if(_pos < 0)
  {
   PRINT("parameter \"_pos\" error!");
   return;
  }
  Extend(1);
  if(_pos >= numofUnit)
  {
   _pos=numofUnit;
  }
  else
  {
   CopyElements(&units[_pos+1], &units[_pos], (sizeof(T) * (numofUnit - _pos)));
  }
  units[_pos] = _value;
  numofUnit++;
  return;
}
public:
/*########################*/
//T Get(int _pos)
//取得链表中指定的成员
/*########################*/
T Get(int _pos) const
{
  if (_pos >= numofUnit)
  {
   SLOP_OVER_INOF;
   _pos = numofUnit - 1;
  }
  return units[_pos];
}
/*########################*/
//void Assign(const T& _value)
//向链表中追加成员
/*########################*/
void Assign(const T& _value)
{
  Insert(_value,Count());
  return;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-12-24 23:35:45 | 只看该作者
你要干嘛?
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-27 17:56 , Processed in 0.067146 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表