a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 82|回复: 1

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

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
该模式引自游戏编程精炼,可是他那儿那琅缦沔是windows的代码,放到linux下不能运行,所以进行了调整。 % D3 G' _& P  U; @
  声名:在轨范设计的时辰,会经常用到一组或几组类型不异(classT)的数据,假设我们使用链表存储。
: G5 N% e* j6 m9 L- \  面临的问题:   q% ?3 f2 u! x+ T& r, ?% J
  1、链表存放的位置。 6 q9 }0 c# r$ R1 o9 j
  2、每建树一个对象都冲要入到该链表中,每销毁一个对象都要从链表中删除 , e9 j( {6 ]. v6 y
  3、不能胡乱的插入和删除对象。
" D- }0 o6 Z0 ]9 @  要解决膳缦沔的问题,可能需要在良多处所插入近似的代码,往往这种代码就是惹人bug的处所,有一种解决方檀卷是“自动列表模式”。 / A) c* w9 p- n% O% G* H+ I
  点击(此处)折叠或打开 + t) P& B1 _0 n+ L$ V" M
  #ifndef_TAUTOLISTS_H_ + f, Y7 J. k' F
  #define_TAUTOLISTS_H_ + E" @6 _! l0 N% d. f- W: S3 w4 V) N
  #include & \. G/ E% c) O$ V  S* U) e: R2 U
  #include ! R0 B6 }* W9 K) f% N9 K& L  F
  usingnamespacestd;
5 g( f% K8 b: B/ `' f4 C5 }4 E  template
6 U) a* R8 b/ R% ]+ q  classTAutolists * v: X5 T- |) e) X6 S
  { # i1 ~4 f, Q# T( B$ [
  typedeftypenamelist::iteratoriter_t;
" @! w$ w) C% i0 Y, {) s* z  public: 2 U2 |  G9 s/ n1 r9 y
  TAutolists() * B8 @  `8 @( m# t
  { 0 T5 F; V0 Q) O
  ms_List.push_front(static_cast(this));
6 R& _7 f. S+ h. M& a  } ; q# j$ N/ H, p! o/ K; r
  virtual~TAutolists()
- v4 v9 u2 [7 i! Y  w) W  {
* G0 G3 z4 t( w( M+ _' u: U  ms_List.remove(static_cast(this));
! w; Y& A& j$ d  t. O1 C2 D  }
/ t* T0 i) b9 S  public:
1 W4 {3 @+ R  y, D+ w  staticT*GetAutolistFirst() " ?" k# z9 w: k5 t
  { - ]6 n& N: \; n7 u" S$ n9 t3 R
  if(ms_List.begin()==ms_List.end()) . t# J3 [) }* Y- s+ Q" K( \! Y
  {
回复

使用道具 举报

 楼主| 发表于 2012-8-2 08:51:16 | 显示全部楼层

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

  returnNULL; 6 C0 V; Z) E0 v' x/ W0 h! B9 l6 P
  } ) t+ s# }7 X1 y' u  H7 h: u$ \
  else
* P1 z8 P9 A+ o  {
' J  b) [" j' F% H# N  ms_ListIter=ms_List.begin(); ( {, w  S/ i: s# f0 j! D: I3 q
  return*ms_ListIter; ' l8 X4 u/ s% o+ u& x
  }
" J/ p$ Q- ^9 Y& \* b3 A  }
4 n9 a; W& P" g  staticT*GetAutolistNext() ! {0 K  b) t- z) d
  {
  ^' b( m+ N& }. z9 l9 d  if(ms_ListIter==ms_List.end()
+ Q- D/ s/ e* z5 A: E  ||++ms_ListIter==ms_List.end()) ; w. U0 i% a: n6 d- Q9 j1 C4 I
  { ! v; R. w+ H  N" l% c, l- q
  returnNULL; ( U" b' o! [& n5 |8 V
  } ! r& }; s) E; u! `7 S, ~
  else
2 N" J* c. H' ~4 Q' o% M4 ^4 {  { ! M$ d. ~! s# m0 b
  return*ms_ListIter; " P/ g- q3 \; |8 ^4 U! M
  } 7 V2 [; h& c) ]- r+ D
  } $ n: k# }" Y$ e
  staticunsignedintGetAutolistCount()
5 X9 i# a# f! [- s4 w3 q8 ~3 v/ }  {
6 L& N. P2 R' s  returnms_List.size();   }
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 12:18 , Processed in 0.266317 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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