0

我很抱歉标题很棘手,这是示例

graph main_graph = //initialize graph
graph sub_graph = //pick a subset of edges from the main_graph
while ( ! sub_graph.size() == 0) {
    select_edge();    //here I pick an edge basing on some heuristics
    reduce_graph();   //here I remove some edges from the main_graph
    sub_graph = //pick a subset of edges from the main_graph
}

所以关键是我必须sub_graph在进入循环之前(因为它可能已经是空的)和进入新迭代之前编写相同的代码来定义。如果不是我实际上有三个具有相同问题的嵌套循环,并且初始化它们的代码sub_graph是一堆代码行,那么这不会那么糟糕,所以我的代码看起来会重复很多。

关于如何更好地设计这个循环的任何建议?我没有限制(可以使用fordo-while...)

即使这是伪代码,因为更像是一个“设计”问题,我正在用 C++ 编码!

4

2 回答 2

2

为避免重复大量代码,请将代码放入函数中:

graph calc_subgraph(...) {...}

然后使用它来初始化和重新计算您的值:

for (graph subgraph = calc_subgraph(...); subgraph.size() != 0; subgraph = calc_subgraph(...))
于 2012-12-31T05:08:16.180 回答
1

如果初始化 sub_Graph 的代码有很多行,那么编写一个返回初始化图的函数,或者通过传递的引用/指针初始化 sub_graph 的函数。然后只需在循环内调用该函数。这将减少您必须编写和阅读的代码量。涉及使用相同代码两次的循环不时出现。

编写输出逗号分隔列表的循环就是一个很好的例子,因为您希望逗号保留在列表项的内部。因此,您可以在循环之前执行第一项,也可以在循环之后删除逗号。

In these kind of cases, calling the initializing code before the loop, and then again at the end of each loop iteration may be faster then putting a conditional test in the loop to skip parts of it every time.

于 2012-12-31T05:12:26.873 回答