需要循环中的逻辑建议

时间:2013-04-09 18:39:04

标签: c++ c coding-style

我有双重链接列表的三个元素,我有两个操作:foo()bar()

基于一些布尔标志,我必须在两个元素的第一个上执行foo()操作(如果true),并且bar()操作(如果false)on剩下的单个元素。

所以,这是干净的代码,但是错误,因为它对两个元素执行foo():

while(head->next != NULL)
{
   if(head->flag == true)
   { 
      foo();
   }
   if(head->flag == false)
   {
      bar();
   }
   head = head->next;
}

列表元素可以按随机顺序排列,因此可以是A,C,B或B,A,C(在两种情况下都要说A和B需要foo()操作)。

我的问题是,如果A和B先到,我会在它们上面调用foo()函数(我不能如上所述)。

实际上,当我再次对其进行分析时,我发现在每种情况下我都会调用此函数两次。

我想出的解决方案是:

int flag = 0;
while(head->next != NULL)
{
   if(head->flag == true && flag == 0)
   { 
      foo();
      flag = 1;
   }
   if(head->flag == false)
   {
      bar();
   }
   head = head->next;
}

但是代码突然变得丑陋。

有没有办法在不使用标志的情况下解决这个问题,并保持代码清洁?

1 个答案:

答案 0 :(得分:1)

void NullFunc( void ) {}
void (*operation)(void) = foo;

while( head->next != NULL )
{
    if( head->flag == true )
    {
         operation();
         operation = NullFunc;
    }
    else
    {
        bar();
    }

    head = head->next;
}