a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 103|回复: 0

[程序员] 2012年软件水平考试程序员辅导笔记之C++自动列表模式

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
该模式引自游戏编程精粹,但是他那里面是windows的代码,放到linux下不能运行,所以进行了调整。
+ d+ z% T$ c2 Q* ?8 x) C  说明:在程序设计的时候,会经常用到一组或几组类型相同(classT)的数据,假设我们使用链表存储。 - R0 x6 ]' F5 S$ ]  f! {* Z8 c: ^
  面临的问题:
& w, a3 Z" \: t8 w8 M0 `  1、链表存放的位置。 % e4 z! e: ]4 v" c6 z* c
  2、每创建一个对象都要插入到该链表中,每销毁一个对象都要从链表中删除 . b- ^( x5 x! Y6 A
  3、不能胡乱的插入和删除对象。 1 R( P9 B& ]4 T  o3 F; i+ }
  要解决上面的问题,可能需要在很多地方插入类似的代码,往往这种代码就是引入bug的地方,有一种解决方案就是“自动列表模式”。 9 [) m- Q  \, k5 V
  点击(此处)折叠或打开
3 f# n9 J- d( R+ W  #ifndef_TAUTOLISTS_H_
& ?. K; m# u% B  #define_TAUTOLISTS_H_
+ k5 t& M3 i7 S2 t( z' H  #include
$ Z, f* O4 d+ n6 _/ S( F/ q  #include , A- }% _2 v4 K  [
  usingnamespacestd; 7 w6 t& Y# m9 V" P# G0 _. z
  template $ G2 o' y, d* o% M
  classTAutolists
6 C% b. O9 s; O3 r6 x: ?! }  { + N. n0 i3 |5 q' t
  typedeftypenamelist::iteratoriter_t;
1 ^0 O0 P5 q$ Y: J* b6 V" i  public: * i5 A+ @: p9 @0 R0 [8 q( ]
  TAutolists()
: A+ s: y4 ]8 t5 b  { / g- E" z6 T5 ?! L! v3 `% F
  ms_List.push_front(static_cast(this));
0 D# C. v+ D+ r  } 2 j# K' G& g* w3 g0 R* O* Y2 k" H
  virtual~TAutolists() % u. C) ]3 Q5 [  m
  { * t# i: A) y, l. N+ A
  ms_List.remove(static_cast(this)); 3 [- i2 T' W* S( e! q% O4 o- J
  }
5 ^; Q. }9 M( y2 J6 j# M7 h2 U  public:
. K) o6 q: f, q+ a8 x% U# u  staticT*GetAutolistFirst()
9 i  ]: W  P3 b  {   if(ms_List.begin()==ms_List.end())
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 13:34 , Processed in 0.174853 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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