BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #43285同步于 2010/9/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

一个简单功能的两种写法,孰优孰劣

gucheng
2010/9/5镜像同步4 回复
下面的代码段用于实现遍历avll tree,有两种写法,两种写法都可以实现该功能,但是有种写法会有隐患,或者说增量开发时容易出错,为什么? 写法一: ... AVLL_NODE *pstCurNode = NULL; AVLL_NODE *pstNextNode = NULL; /*scan avll tree, find first node*/ pstCurNode = (AVLL_NODE *)AVLL_FIND_OR_FINDNEXT(...); while(NULL != pstCurNode) { /*get next*/ pstNextNode = (AVLL_NODE *)AVLL_GETNEXT(...); ... func1(pstCurNode);/*process use pstCurNode*/ if(...) { ... pstCurNode = pstNextNode; continue; } .../*other process*/ pstCurNode = pstNextNode; } ... 写法二: ... AVLL_NODE *pstCurNode = NULL; AVLL_NODE *pstNextNode = NULL; /*scan avll tree, find first node*/ pstNextNode = (AVLL_NODE *)AVLL_FIND_OR_FINDNEXT(...); while(NULL != pstNextNode) { pstCurNode = pstNextNode; /*get next*/ pstNextNode = (AVLL_NODE *)AVLL_GETNEXT(...); ... func1(pstCurNode);/*process use pstCurNode*/ if(...) { ... continue; } .../*other process*/ } ... ----------- 非凡技术论坛 www.feifanbbs.com 打造精品编程论坛 诚招版主
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
jmpesp机器人#1 · 2010/9/5
【 在 gucheng 的大作中提到: 】 : 下面的代码段用于实现遍历avll tree,有两种写法,两种写法都可以实现该功能,但是有种写法会有隐患,或者说增量开发时容易出错,为什么? : 写法一: : ... : ................... 专门查了下啥叫增量开发, 增量开发就是指在项目开发周期内,以一定的时间间隔开发部分工作软件? 既然是有时间间隔的,那么我觉得人呢 容易遗忘,对于以前写的代码一段时间过后也估计忘得差不多了。既然要回头来做,则原先的代码就要保证最大程度的清晰性吧,个人以为第2种相对好点。 这种问题应该是个开放的问题 不同人的感觉应该是不同的,所以答案个人以为也可以是不同的,只要说得有理
wks机器人#2 · 2010/9/5
这个怎么样呢? 定义一个宏: /* avl_tree_for_each_safe * 安全地遍历一个数。这里“安全”意味着你可以改变cur的值,而next仍然是有效的。 * cur, next:两个指向AVLL_NODE的指针,局部变量 * tree:要遍历的树 * 麻烦之处就是cur有可能是NULL,这时候不能计算next。所以要?:一下 */ #define avl_tree_for_each_safe(cur, next, tree) \ for (cur = (AVLL_NODE *)AVLL_FIND_OR_FINDNEXT(...), \ next = (cur!=NULL) ? (AVLL_NODE *)AVLL_GETNEXT(...) : NULL; \ cur != NULL; \ cur = next, \ next = (cur!=NULL) ? (AVLL_NODE *)AVLL_GETNEXT(...) : NULL; ) 使用的时候 /*先定义两个局部变量*/ AVLL_NODE *pstCurNode = NULL; AVLL_NODE *pstNextNode = NULL; /* 然后使用那个宏遍历 */ avl_tree_for_each_safe(pstCurNode, pstNextNode, yourTree) { func1(pstCurNode); if(...) { continue; } /* other_process */ }
gucheng机器人#3 · 2010/9/5
【 在 wks 的大作中提到: 】 : 这个怎么样呢? : 定义一个宏: : /* avl_tree_for_each_safe : ................... goodidea
idx001机器人#4 · 2010/9/6
【 在 wks 的大作中提到: 】 : 这个怎么样呢? : 定义一个宏: : /* avl_tree_for_each_safe : ................... 特别喜爱,我经常就一个if~~~