返回信息流下面的代码段用于实现遍历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 打造精品编程论坛
诚招版主
这是一条镜像帖。来源:北邮人论坛 / cpp / #43285同步于 2010/9/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
一个简单功能的两种写法,孰优孰劣
gucheng
2010/9/5镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 gucheng 的大作中提到: 】
: 下面的代码段用于实现遍历avll tree,有两种写法,两种写法都可以实现该功能,但是有种写法会有隐患,或者说增量开发时容易出错,为什么?
: 写法一:
: ...
: ...................
专门查了下啥叫增量开发,
增量开发就是指在项目开发周期内,以一定的时间间隔开发部分工作软件?
既然是有时间间隔的,那么我觉得人呢 容易遗忘,对于以前写的代码一段时间过后也估计忘得差不多了。既然要回头来做,则原先的代码就要保证最大程度的清晰性吧,个人以为第2种相对好点。
这种问题应该是个开放的问题 不同人的感觉应该是不同的,所以答案个人以为也可以是不同的,只要说得有理
这个怎么样呢?
定义一个宏:
/* 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 */
}
【 在 wks 的大作中提到: 】
: 这个怎么样呢?
: 定义一个宏:
: /* avl_tree_for_each_safe
: ...................
goodidea
【 在 wks 的大作中提到: 】
: 这个怎么样呢?
: 定义一个宏:
: /* avl_tree_for_each_safe
: ...................
特别喜爱,我经常就一个if~~~