代码之家  ›  专栏  ›  技术社区  ›  Jonas

从堆栈中弹出对象[已关闭]

  •  0
  • Jonas  · 技术社区  · 13 年前

    假设我想从堆栈中弹出对象并检查它们的状态 FUP (面朝上)或不面朝上。

    我想一直这样做,直到堆栈为空或者实例的状态不朝上;在这种情况下,我需要将这个实例推回并停止循环。

    以下是一种方法:

    bool isfup = true;
    
    while(pop(stack, &ins) && isfup = ins->state == FUP)
    {
        // continue removing elements from stack
    }
    
    if(isfup == false)
        push(stack, ins);
    

    我是这样做的:

    while(pop(stack, &ins) && (ins->state == FUP || (push(stack, ins) && false)));
    // while( A && ( B || ( C && false ) ) );
    

    我的问题是,我是否应该停止这种风格的代码编写,转而追求清晰?还是我应该保留它?

    3 回复  |  直到 5 年前
        1
  •  4
  •   Platinum Azure    13 年前

    使用长而清晰的方法将其放入一个函数中,然后在需要调用时用一行快速调用该函数。毕竟,这是过程编程中函数的目的之一!:-)

        2
  •  1
  •   ddyer    13 年前

    如果堆栈最初为空或变为空,则元代码将崩溃。 同样作为一种风格,检查顶部元素,然后弹出或继续

    while(!stackEmpry(stack) && (top(stack)->state==FUP)) { pop(stack); }
    
        3
  •  1
  •   Shing Yip    13 年前

    任何非一次性程序都会被你或其他人阅读比写作多得多。这种编码风格需要更长的编写时间,甚至更长的读取时间,运行速度不会更快,而且容易出错。你想完成什么?

    在过去人们用纸打印代码的好日子里,你可能有借口,但在这个时代,视网膜显示无处不在。。。