CList 细节

Clist的用法网上已有很多,且附有简明示例,易学入手。可是今天在使用时却有基础细节不甚明了,通过代入数据一一试验中的证实,现分享如下。

首先定义              

CList<class TYPE, class ARG_TYPE>  MyList

POSITION  pos;

接下来主要讨论调用成员函数时,pos的变化:

1.  TYPETemp = MyList.GetNext(pos),这个在很多学习资料中有介绍,返回当前pos的值,pos位置后移一位,相当于a++,先运算后自增。


2.  TYPETemp = MyList.GetPtev(pos), 这和1中类似;但是当pos指向首位置,仍旧返回当前位置值,而此时pos的指向会发生错误。


3.  MyList.InsertBefore (pos,TYPE)

MyList.InsertAfter (pos,TYPE)

这两个成员函数调用时,pos的变化我们通过一个实例来说明:

列表:A→B→C→D→E→F→G→H,

当pos指向D时InsertBefore(pos,X),此时列表变为

A→B→C→X→D→E→F→G→H

Pos的指向位置依旧是D。InsertAfter依然。


4.  MyList.RemoveAt (pos)

        依旧以3中链表为例:A→B→C→D→E→F→G→H

当pos指向D时RemoveAt (pos),此时pos依旧指向D,可是D已经被移除列表,pos为何依旧指向D呢?!我们通过调用几个成员函数来揭示其中的位置指向关系。

假设此时pos指向D位置

MyList.RemoveAt (pos)

TYPETemp = MyList. GetAt (pos)                      //返回Temp值为D

以下①②是并列关系,承接以上代码

①   Temp = MyList. GetNext (pos)                  //pos为NULL

②   Temp = MyList. GetPrevt (pos)                 //返回Temp值为C

Temp = MyList. GetNext(pos)                            //返回Temp值为E

         由此我们便可以得出结论,CList 列表是与双链接列表行为相似的,可以用下图表示:

A<-->B<-->C<-->D<-->E<-->F<-->G<-->H


A<-->B<-->C<-->E<-->F<-->G<-->H

                 ^

                 |

D

5.  最后再说下自己编程时遇见的一个小问题:

         POSITION pos=MyList.Find((TYPE) Temp);

Find函数查找Temp时会对TYPE类型进行比较,当TEPY是结构体或者类时,就可能出现错误,需要对运算符“==”重构

TYPEoperator ==(TYPE &)const

当然TYPE是普通数据结构(int doublestring等)时不会出现此问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值