编程的心法与注意事项

来源:互联网 发布:淘宝酒类授权书样子 编辑:程序博客网 时间:2024/04/29 08:54
  • [lo, hi) :一定要明确区间的端点,是否包含;

1. 将尽可能多的操作封装在函数体内,主调函数尽可能简单

  • 一些对成员变量有所更易的函数,尽可能地返回该变量以前的旧值;

    def add_vertex(self):    self._mat.append([])    self._vnum += 1    return self._vnum - 1

    上述代码,为图的邻接表实现时的增加新的结点进去;

2. 函数合并

二叉树的中序递归遍历

template <typename T, typename VST>void visitAlongLeftBranch(BinNode<T>* x, Stack<BinNode<T>*>& S){        while (x){            S.push(x);            x = x->lChild;        }                    // 直到没有左孩子结点为止};template <typename T, typenaem VST>void travInorder_I1(BinNode<T>* x, VST& visit) {    Stack<BinNode<T>*> S;    while (true){        visitAlongLeftBranch(x, S);        if (S.empty())            break;        x = S.pop();        visit(x->data);        x = x->rChild;    }}

因为两个函数是被调用和调用的关系,且二者的实现具有一致的 while 结构:

template <typename T, typename VST>void travInorder_I2(BinNode<T>* x, VST& visit){    Stack<BinNode<T>*> S;    while (true){        if (x) {            S.push(x);            x = x->lChild;        } else if (!S.empty()){            x = S.pop();            visit(x->data);            x = x->rChild;        } else             break;    }}
0 0
原创粉丝点击