a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 83|回复: 1

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

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
该模式引自游戏编程精炼,可是他那儿那琅缦沔是windows的代码,放到linux下不能运行,所以进行了调整。
3 @1 W' G& k* G. j  声名:在轨范设计的时辰,会经常用到一组或几组类型不异(classT)的数据,假设我们使用链表存储。
9 N; R  k$ a2 K& z0 q9 p  面临的问题: $ L) z5 K$ r: |" K" h6 L1 r. x
  1、链表存放的位置。
3 K( q$ G6 {" C! p% r  2、每建树一个对象都冲要入到该链表中,每销毁一个对象都要从链表中删除 : B/ a) @/ M4 Z1 C' B
  3、不能胡乱的插入和删除对象。 # D6 N1 W2 l1 @* v4 A5 K# h" f3 b7 T3 J
  要解决膳缦沔的问题,可能需要在良多处所插入近似的代码,往往这种代码就是惹人bug的处所,有一种解决方檀卷是“自动列表模式”。
- h, C! \# C( F. k2 `0 E3 v7 Z  点击(此处)折叠或打开
) o& N2 h& y4 C! R  #ifndef_TAUTOLISTS_H_ " y4 ]/ b2 X4 u/ T
  #define_TAUTOLISTS_H_
2 T8 V, @' Q+ d6 g/ v  #include 3 d9 ~# U2 ]) S! \
  #include
9 T# k8 K' E- ^, A+ C$ O6 {  usingnamespacestd; 3 S, F* x( O0 `9 ^
  template
8 r6 M5 t  w5 j  classTAutolists $ o# e0 B+ W9 D) \1 l" S
  {
8 l' N/ [# J  G: [: r, G4 ]" K% z  typedeftypenamelist::iteratoriter_t; 3 z- F% [( V: O( f7 P
  public: ) Y) k: d# l" k
  TAutolists() ( K6 d/ m) N; d# R3 b
  {
2 o! |, I, q; `8 E" W/ ]; |- \) H* k  ms_List.push_front(static_cast(this)); $ q/ [0 I" t9 V7 F
  }
0 C0 O& P% r) v  virtual~TAutolists() 3 a6 b* G2 D/ s5 X
  {
% p7 |, \) N: z7 w  ms_List.remove(static_cast(this)); , K+ y4 s) @& c% k7 U% \, `6 G
  }
1 l- D" _; n1 c% X6 ^) L7 w  public:
0 N( d' K0 x4 w" ~5 }% P" i% G  staticT*GetAutolistFirst()
8 |! r" @8 M/ O/ Y  { . S; H. q% ~* K' e0 k
  if(ms_List.begin()==ms_List.end())
& n7 S7 N8 R; s; u  {
回复

使用道具 举报

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

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

  returnNULL; + S6 n. T+ R6 K( h. C8 ]2 i
  }
8 M% O: W- ?3 E4 n  k  else * v% ?- d  z/ U+ s
  { " |- Z/ U0 \4 K  G
  ms_ListIter=ms_List.begin(); 8 L* v' E) c. R, R
  return*ms_ListIter; : g9 t9 [+ o7 j, K4 ~: C
  }
' c. _$ r$ q; v$ {7 B, J  }
2 E( |6 y  G, m  staticT*GetAutolistNext()
* U% ^/ U( e) E; S  { 8 D1 M% r! E7 f0 Y; s
  if(ms_ListIter==ms_List.end() 3 X1 M" t( h3 {  ]+ q  E3 |
  ||++ms_ListIter==ms_List.end())
/ w! F! `; a7 C7 [/ d  {
0 H* K: a6 w1 o& X$ I8 M# T  returnNULL;
( e8 \, m& i1 u$ [5 Q  }
, [5 {/ g4 ]& I' F- U  L  else - V: I6 d8 l8 T( S
  { 2 G7 t7 w" {/ y" Q9 G+ m3 v+ Q3 K
  return*ms_ListIter; % w4 T0 N8 B+ E
  }
4 G8 w* N% @6 l  } $ @$ f* O) p6 q5 Q/ p/ ]: Q: T; T
  staticunsignedintGetAutolistCount()
& f6 i9 f. T  H/ _; B# B: c5 W  {
* x  g) K" ]0 j9 q  returnms_List.size();   }
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-9 04:37 , Processed in 0.267617 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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