当前所在位置:珠峰网资料 >> 计算机 >> 软件水平 >> 正文
2015年软考程序员辅导:C++自动列表模式
发布时间:2012/3/22 10:44:17 来源:城市网学院 编辑:ziteng
  该模式引自游戏编程精粹,但是他那里面是windows的代码,放到linux下不能运行,所以进行了调整。

  说明:在程序设计的时候,会经常用到一组或几组类型相同(classT)的数据,假设我们使用链表存储。

  面临的问题:

  1、链表存放的位置。

  2、每创建一个对象都要插入到该链表中,每销毁一个对象都要从链表中删除

  3、不能胡乱的插入和删除对象。

  要解决上面的问题,可能需要在很多地方插入类似的代码,往往这种代码就是引入bug的地方,有一种解决方案就是“自动列表模式”。

  点击(此处)折叠或打开

  #ifndef_TAUTOLISTS_H_

  #define_TAUTOLISTS_H_

  #include

  #include

  usingnamespacestd;

  template

  classTAutolists

  {

  typedeftypenamelist::iteratoriter_t;

  public:

  TAutolists()

  {

  ms_List.push_front(static_cast(this));

  }

  virtual~TAutolists()

  {

  ms_List.remove(static_cast(this));

  }

  public:

  staticT*GetAutolistFirst()

  {

  if(ms_List.begin()==ms_List.end()) [NextPage]   {

  returnNULL;

  }

  else

  {

  ms_ListIter=ms_List.begin();

  return*ms_ListIter;

  }

  }

  staticT*GetAutolistNext()

  {

  if(ms_ListIter==ms_List.end()

  ||++ms_ListIter==ms_List.end())

  {

  returnNULL;

  }

  else

  {

  return*ms_ListIter;

  }

  }

  staticunsignedintGetAutolistCount()

  {

  returnms_List.size();

  }

  public:

  staticlistms_List;

  staticiter_tms_ListIter;

  };

  //Declarationsofstaticvariables

  template

  listTAutolists::ms_List;

  template

  //typedeftypenamelist::iteratoriter_t;

  typenamelist::iteratorTAutolists::ms_ListIter;

  #endif

  测试程序:

  点击(此处)折叠或打开

  #include

  #include"TAutolists.h"

  classvec:publicTAutolists

  {

  public:

 [NextPage]   intm_x;

  intm_y;

  };

  usingnamespacestd;

  /*

  template

  classA

  {

  public:

  staticTa;

  };

  template

  TA::a;

  intmain(intargc,char*argv[])

  {

  A::a=0;

  }

  */

  intmain(intargc,char*argv[])

  {

  veclv1;

  lv1.m_x=1;

  veclv2;

  lv2.m_x=2;

  cout《"countis"《lv1.GetAutolistCount()《endl;

  vec*cptmp=lv2.GetAutolistFirst();

  while(cptmp)

  {

  cout《"xis"《cptmp->m_x《endl;

  cptmp=lv2.GetAutolistNext();

  }

  return(0);

  }

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved