假设我有一个对象类,名为Computer
。然后说我有另一个名为 Wire 的类。 (这些名称用于简单地解释我想要做什么;真正的名称要复杂一些)
struct Computer {
std::vector<Wire *> wires;
};
struct Wire {
Computer * computers[2];
};
假设现在我有一个计算机类,并且想要对它通过电线连接到的所有计算机执行一些操作。我可以循环所有电线并在电线中设置一个方法,以便计算机执行以下操作:
wire->doSomething(this,blahblah)
因此线路找到另一台计算机,遍历其线路列表,然后执行相同的操作:
otherWire->doSomething(&otherComputer,blahblah)
(当然,当它发现自己在列表中时它会跳过)。
这是可行的,但是当存在循环链接时,它会创建一个连续调用所有球的 doSomething
的无限循环。防止这种情况的最佳方法是什么,或者是否有更好的整体解决方案来解决此问题?
最佳答案
您得到的是一个有向循环图。
通常,您希望对每个节点使用“visited”属性,然后在访问每个节点之前检查它是否尚未被访问过。
在半伪代码中,你会这样做:
std::map<Wire*,bool> visited; // Outside the search, so that it's not local
if (!visited[otherWire]) {
visited[otherWire] = true;
otherWire->doSomething(&otherComputer,blahblah)
}
关于c++ - 多个对象联网的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9706534/