网络工程师
北京 天津 上海 重庆 广东 浙江 山东 江西 江苏 安徽 湖南 湖北 河南 河北 广西 福建 四川 山西 陕西 贵州 辽宁 吉林 黑龙江 宁夏 云南 新疆 青海 甘肃 内蒙古 海南 西藏

C++自动列表模式

更新时间:2015-12-31 浏览次数:0

新葡萄京娱乐场网址网络工程师备考辅导小编,整理出‘C++自动列表模式’等信息,希翼能为广大考生提供帮助。及时了解相关考试信息,查询考试资讯,了解招考讯息,关注新葡萄京娱乐场网址,国内最快最全的考试信息综合平台,为您提供最全最新的考试查询新体验。

该模式引自游戏编程精粹,但是他那里面是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())

{

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:

intm_x;

intm_y;

};

usingnamespacestd;

/*

template

classA

{

public:

staticTa;

};

template

共1条 1
XML 地图 | Sitemap 地图