a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 69|回复: 0

[程序员] 2012年软件水平初级资格程序员考试重点知识18

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
该模式引自游戏编程精粹,但是他那里面是windows的代码,放到linux下不能运行,所以进行了调整。 : J. s7 b# f% f% A7 ^4 l. y* I
  说明:在程序设计的时候,会经常用到一组或几组类型相同(classT)的数据,假设我们使用链表存储。 4 h6 n# N- g& U& P/ q7 F1 ?
  面临的问题: # N& D' \) x3 t! m  i
  1、链表存放的位置。
3 D* ]1 K5 D1 `% [$ X  2、每创建一个对象都要插入到该链表中,每销毁一个对象都要从链表中删除
& d* p) ]1 q7 S5 c( M7 D  3、不能胡乱的插入和删除对象。 # g6 X6 W7 J0 l7 O6 F
  要解决上面的问题,可能需要在很多地方插入类似的代码,往往这种代码就是引入bug的地方,有一种解决方案就是“自动列表模式”。
/ a5 V" _4 W$ Y6 x  S* ]  点击(此处)折叠或打开 ( r" j$ r- r/ W+ u! i
  #ifndef_TAUTOLISTS_H_
5 p, n: Z6 v8 e+ `5 P0 J3 l) ]  #define_TAUTOLISTS_H_ # @) C& p2 [$ o0 f: m5 j
  #include 5 L/ W9 T( z- Y* \' J& r
  #include ) l- x1 p2 \4 _$ l1 H9 g7 R7 W
  usingnamespacestd;
6 s0 u' c  Z5 |. E# ~. v9 s  template . [8 _9 ~7 |2 b, `1 t: ]
  classTAutolists
& d. \9 X; v8 d; r6 y  {
' P, j3 A) S5 O  typedeftypenamelist::iteratoriter_t;
+ y0 s3 J0 ]7 |# a) w  T* p' f  public:
* J$ Z" m  M/ I  TAutolists()
* \6 ^5 T% v6 P8 M! [6 g  {
+ h+ K- R6 e- G8 x9 ]3 ^5 N, v( `  ms_List.push_front(static_cast(this));
1 o5 q1 {4 f' D  } 7 P3 |. P8 v+ y7 v  `
  virtual~TAutolists() * z) A& V7 Y  H% ^! {4 U( I1 O9 k
  { ! e7 _( f$ s, g2 b
  ms_List.remove(static_cast(this));
3 \# G8 |  [( I% a  } . Z) Y* }8 F) G. j0 W* Y
  public:
+ c- r# z2 `; h  staticT*GetAutolistFirst() 6 F! r9 k: q( s: G6 B! Z
  {   if(ms_List.begin()==ms_List.end())
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 08:48 , Processed in 0.461702 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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